2013-02-12 66 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

相关问题