2013-02-12 86 views
0

我有以下代碼:分配使用PRIMARY KEY約束的字符串>>違反作用

  var roleEditionCNT = new Role { ApplicationName = "TTT", RoleName = "EDITION_CNT" }; 
      var roleEditionKCD = new Role { ApplicationName = "TTT", RoleName = "EDITION_KCD" }; 
      var roleEditionInterne = new Role { ApplicationName = "TTT", RoleName = "EDITION_INTERNE" }; 
      var roleConsultationInterne = new Role { ApplicationName = "TTT", RoleName = "CONSULTATION_INTERNE" }; 
      var roleConsultationExterne = new Role { ApplicationName = "TTT", RoleName = "CONSULTATION_EXTERNE" }; 
      var roleAdministrator = new Role { ApplicationName = "TTT", RoleName = "ADMINISTRATOR" }; 

      new List<Role> 
       { 
        roleEditionCNT, 
        roleEditionKCD, 
        roleEditionInterne, 
        roleConsultationInterne, 
        roleConsultationExterne, 
        roleAdministrator 
       }.ForEach(b => context.Roles.AddOrUpdate(m => m.RoleName, b)); 

然後,我可以這樣做:

var myUser = new User 
     { 
     Company = "DELTOY", 
     FirstName = "BRYAN", 
     LastName = "KENETH", 
     Roles = new List<Role> { roleEditionCNT } 
     }; 

現在我想修改的方法我分配這樣的角色:

var myUser = new User 
     { 
     Company = "DELTOY", 
     FirstName = "BRYAN", 
     LastName = "KENETH", 
     Roles = new List<Role> { new Role { ApplicationName = "TTT", RoleName = "EDITION_CNT" } } 
     }; 

此代碼編譯成功,但在運行時我得到了錯誤:

Violation of PRIMARY KEY constraint 'PK_Roles'. Cannot insert duplicate key in object 'dbo.Roles'

通過簡單地修改上面的代碼,似乎系統正試圖添加一個新的記錄到表角色。我怎樣才能簡單地分配角色但不使用變量。我更喜歡用一個字符串給角色名稱。

有什麼想法?

回答

1

在第二個示例中,您嘗試添加具有新角色的用戶,而不是將其分配給現有角色。您嘗試添加的角色已存在於角色表中。

您可以將Role對象獲取到類似的變量中。

var role = context.First(p => p.RoleName == "EDITION_CNT"); 

然後將其分配給新的用戶。

var myUser = new User 
     { 
     Company = "DELTOY", 
     FirstName = "BRYAN", 
     LastName = "KENETH", 
     Roles = new List<Role> { role } 
     }; 
+0

謝謝。現在很清楚。 – Bronzato 2013-02-12 09:41:01

相關問題