【发布时间】: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