2017-08-04 46 views
0

我正在開發一個帶有angularjs項目的asp.net web api。我的項目實際上是混合粒度認證。我的項目中有幾個表格,但只有三個表格會導致插入問題。三個表格是AspNetRoles,RolePermission和Roles。和他們的關係是: enter image description here不能在asp.net中插入數據到很多關係

角色表中有三個角色。員工,經理和管理員。當管理員更改任何角色權限時,舊的角色權限將被刪除,並將新的權限插入到AspNetRoles表中。但是,執行此操作時會發生錯誤。錯誤是:

違反PRIMARY KEY約束'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()一個問題。請幫我解決這個問題。

+0

我認爲這個問題是你不保存更改刪除角色後在添加新的之前。 –

+0

您應該分開這些交易。 –

+0

我也嘗試從AspNetRoles中刪除角色後保存更改。但同樣的問題仍在繼續。 @ WEI-DBA –

回答

0

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

或者在你的代碼的對象rolePermissionList.PermissionList複製了itens

+0

我已經刪除了所有與RoleId相關的AspNetRoles。所以沒有機會複製螞蟻項目。還要記住,即使角色權限表中沒有數據,也會發生問題。 –

+0

而且我還檢查了rolePermissionList.PermissionList的不同項目。如果我從角色對象中刪除特定角色ID的數據,然後檢查角色權限表中是否有任何返回true的AspNetRoles。角色許可表中沒有數據的地方。請幫我解決這個問題 –