多对多关系插入和删除

时间:2009-05-13 09:47:07

标签: entity-framework

我有实体

  • 用户:

ID

名称

导航:群组

  • 组:

ID

名称

导航:用户

关系:

  • usrgrp

ID用户所

idgroup

这里我不想向关系而不是主要实体添加数据。请举个例子 如何删除并插入usrgrp。

提前致谢。 第

2 个答案:

答案 0 :(得分:1)

实体框架将usrgrp表包含在导航中。它不会有实体。因此,对此表的所有访问仅通过用户和组实体。由于这是多对多的关系,因此您可以从两端以相同的方式访问关系。

someUser.Group.Add(new Group());
someUser.Group.Remove(someExistingGroup);
context.SaveChanges();

答案 1 :(得分:1)

Craig是对的,因为usrgrp表只有2个FK,它是纯连接表,因此实体框架将其解释为ManyToMany关联。

正如Craig上面的代码示例所示,这对大多数客户来说通常都很好。

如果您想要独立管理UserGroup关系,一个选项是在usrgrp表中添加一个额外的列,标识列可能是最简单的。然后,实体框架可以不再将此表折叠为导航,因此您将看到可以独立操作的usrgrp表的实体。

即。

someUser.UserGroups.Add(new UserGroup {User = someUser, Group = someGroup});

请注意,您不必指定Identity列(这会很麻烦),因为它是存储生成的。

通常,大多数客户不希望看到纯连接表的实体,因为没有它,编程体验会更简单。例如,LINQ查询变得有点复杂:

这样:

var users = from g in ctx.Groups
            from u in g.Users
            where g.Name == "Administrators"
            select u;

变为:

var users = from g in ctx.Groups
            from ug in g.UserGroups
            where g.Name == "Administrators"
            select ug.User;

希望这个额外的澄清帮助

亚历