我无法让Entity Framework 4在m2m连接中处理批量更新。我的模型中有多个连接,例如
实践
PracticeID PK
名称...
PracticeSpecialties(连接表)
PracticeID PK
SpecialtyID PK
特
SpecialtyID pk
名称...
非常基本,EF 4处理得很好。我的问题是我需要能够将2个或更多的Specialties“合并”为1个,例如“Pediatrics”和“Children”和“Adolescents”都应该是同一个项目。因此,如果Pediatrics的SpecialtyID为1且Children = 3且青少年= 9,则查询应对PracticeSpecialties中的所有行执行更新,其中SpecialtyID IN(3,9)并将值更改为1.
我可以编写一个存储过程,它将更新连接表中包含一个不需要的SpecialtyID的所有行,然后删除所有现在孤立的Specialties,但如果可能的话,我试图坚持使用EF模式。
感谢任何指导。
答案 0 :(得分:2)
在实体框架中,您必须以对象方式执行此操作=您只需修改联结表即可。您必须使用导航属性中的对象。您的方案将如下所示:
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();
您还应该覆盖Equals
实体中的GetHashCode
和Practice
,并使用HashSet
作为Speciality.Practices
(如果是POCO)。它将为您处理重复。
这将是对连接表的多次删除和插入。这是EF的方法。
答案 1 :(得分:0)
不要使用多对多关系。最终,连接表最终会保存更多数据。改为使用一对多和多对一组合。如果需要,您现在可以创建一个在中间实体中保存已创建/修改日期的属性。
希望这有帮助。