【问题标题】:Cannot insert data into many relations in asp.net无法将数据插入到 asp.net 中的许多关系中
【发布时间】:2017-08-04 19:09:24
【问题描述】:

我正在开发一个带有 angularjs 项目的 asp.net web api。我的项目实际上是混合粒度身份验证。我的项目中有几个表,但只有三个表会产生插入问题。三个表是 AspNetRoles、RolePermission 和 Roles。他们的关系是:

Roles 表中有三个角色。员工、经理和行政人员。当管理员更改任何角色权限时,旧的角色权限将被删除,并将新权限插入到 AspNetRoles 表中。但是,执行此操作时会发生错误。错误是:

违反主键约束“PK_dbo.AspNetRoles”。无法在对象“dbo.AspNetRoles”中插入重复键。重复键值为(dbc1ae5c-a8a7-4aa9-b62e-0948e6e2856c)

我的代码是删除和更新权限

    public void SaveUpdateRolePermission(RoleWisePermission rolePermissionList)
    {
        var RoleObject = db.Roles.Where(s => s.Id == rolePermissionList.RoleId).FirstOrDefault();

        if (RoleObject.AspNetRoles.Any())
        {
            foreach (var rolePermission in RoleObject.AspNetRoles.ToList())
            {
                RoleObject.AspNetRoles.Remove(rolePermission);
            }
        }

        foreach (AspNetRoles Role in rolePermissionList.PermissionList)
        {
            RoleObject.AspNetRoles.Add(Role);
        }


        db.SaveChanges();
        db.Dispose();

    } 

    public class RoleWisePermission
    {
        public List<AspNetRoles> PermissionList { get; set; }
        public System.Guid RoleId { get; set; }
    }

db.saveChanges() 时出现问题。请帮我解决这个问题。

【问题讨论】:

  • 我认为问题在于您在删除角色之后和添加新角色之前没有保存更改。
  • 你应该把这些交易分开。
  • 我还尝试在从 AspNetRoles 中删除角色后保存更改。但同样的问题还在继续。 @WEI-DBA
  • 那张桌子上有触发器吗?

标签: c# asp.net sql-server entity-framework


【解决方案1】:

添加前需要先检查RoleObject.AspNetRoles.Add(Role);是否存在,

或者在您的代码中,您的对象rolePermissionList.PermissionList 重复了itens

【讨论】:

  • 我已经删除了所有与 RoleId 相关的 AspNetRoles。所以没有机会复制蚂蚁物品。还要记住即使角色权限表中没有数据也会出现问题。
  • 我还检查了 rolePermissionList.PermissionList 的不同项目。如果我从 Role 对象中删除特定 Role id 的数据,然后检查 Role Permission 表中是否有任何 AspNetRoles 返回 true。在角色权限表中没有数据的情况下怎么可能。请帮我解决这个问题
猜你喜欢
  • 1970-01-01
  • 2021-07-10
  • 2013-07-20
  • 2020-07-22
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
相关资源
最近更新 更多