使用实体框架进行多对多插入

Sko*_*kog 1 many-to-many entity-framework insert

我是我的数据模型中的两个实体,例如用户和角色,都具有ID字段作为主键。它们之间存在多对多的关系。在数据库中,有三个表:Users,Roles和UsersRoles连接表。

我正在尝试向Users表添加一个新用户:

using(var myContext = new MyContext)
{
   var user = new User() { ... };
   user.Roles.Add(new Role() { ID = 1 });
}
Run Code Online (Sandbox Code Playgroud)

相同的角色可能已经被其他用户使用,因此,当我尝试添加具有相同角色的新用户时,由于EF尝试向角色表中添加新记录,所以我成为主键冲突。

有什么方法可以告诉实体框架(如果角色已经存在,则不向角色表中添加新记录,而仅更新Users和UserRoles表)?EF 1.0版

提前致谢。

Sla*_*uma 5

如果角色已经存在于数据库中,则必须通过将角色附加到上下文中来EF告知:

using(var myContext = new MyContext)
{
    var role1 = new Role() { ID = 1 };
    myContext.Roles.Attach(role1);

    var user = new User() { ... };
    user.Roles.Add(role1);

    myContext.Users.AddObject(user);

    myContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

(我希望这在EF 1中也是如此。)