Entity framework EF如何更新多对多联接表
我在让EntityFramework4处理m2m连接中的批量更新时遇到问题。我的模型中有几个多对多连接,例如 练习Entity framework EF如何更新多对多联接表,entity-framework,many-to-many,Entity Framework,Many To Many,我在让EntityFramework4处理m2m连接中的批量更新时遇到问题。我的模型中有几个多对多连接,例如 练习 PracticeID PK 名字 实践特殊性(联接表) PracticeID PK 特殊标识PK 特产 特殊标识pk 名称… 非常基本,EF4处理得很好。我的问题是我需要能够将2个或更多的专业“合并”为1个,例如“儿科”和“儿童”以及“青少年”都应该是同一个项目。因此,如果Pediatrics的SpecialtyID为1,Children=3,adevents=9,那么查询应该对p
PracticeID PK
名字 实践特殊性(联接表)
PracticeID PK
特殊标识PK
特产
特殊标识pk
名称…
非常基本,EF4处理得很好。我的问题是我需要能够将2个或更多的专业“合并”为1个,例如“儿科”和“儿童”以及“青少年”都应该是同一个项目。因此,如果Pediatrics的SpecialtyID为1,Children=3,adevents=9,那么查询应该对practicesspecialties中SpecialtyID位于(3,9)中的所有行执行更新,并将该值更改为1 我可以编写一个存储过程来更新连接表中包含一个不需要的specialtyid的所有行,然后删除所有现在孤立的specialty,但是如果可能的话,我会尝试使用EF模式
欢迎提供任何指导。不要使用多对多关系。无论如何,联接表最终还是会保存更多的数据。改为使用一对多和多对一组合。如果你想要,你可以做一个在中间实体中保存创建/修改日期的属性。
希望这能有所帮助。在实体框架中,您必须以对象方式进行操作=您可以简单地修改连接表。必须使用导航属性中的对象。您的场景如下所示:
var children = context.Specialities.Include("Practices")
.Single(s => s.Name == "Children");
var pediatrics = context.Specialities.Include("Practices")
.Single(s => s.Name == "Pediatrics");
foreach (var practice in children.Practices)
{
pediatrics.Practices.Add(practice);
}
children.Practices.Clear();
context.Specialities.DeleteObject(children);
context.SaveChanges();
您还应该覆盖实践
实体中的等于
和获取hashcode
,并将HashSet
用于专业实践
(在POCO的情况下)。它会帮你处理口是心非的事情
这将导致对联接表进行多次删除和插入。这是一个很好的方法。@adymitruk:如果你想发表这样的评论,你应该解释一下。这是一件很好的事情,非常好。同时也感谢您提供了关于覆盖Equals和GetHashCode的提示,我将添加它们。回答得很好,谢谢!