如何在EF中更新导航属性/相关表?

5

我有一个对象Customer,其中包含导航属性Days(days是一个单独的表格,其中包含- day_id,customer_id - 外键)。

mycontext.Customers.ApplyCurrentValues(cust);
mycontext.SaveChanges();

这只更新了Customer的标量属性,而没有更新days。有没有一种聪明的方法来更新Days?(不需要手动迭代天数..)?如果没有 - 是否有任何最佳实践来更新第二个表格(days)?

如果可能,请写出应该使用的显式代码。

p.s. 我目前正在使用EF 4.0

2个回答

5

如果您想要一种简单易用的方法来处理断开连接的对象,您可以使用GraphDiff库。

mycontext.UpdateGraph(cust, map => map.OwnedCollection(x => x.Days));
mycontext.SaveChanges();

这将插入或更新客户对象,并同时更新 Days 集合。


1
只是想指出,为了使其正常工作,您需要将 myContext.Configuration.AutoDetectChangesEnabled 设置为 true(如果它被禁用)。 - fabriciorissetto

1

我从这篇帖子中得出的印象是可能有可能实现,但我无法实现它,那篇帖子是否与我描述的情况无关? - BornToCode
2
@BornToCode:是的,你评论中链接的帖子不相关,因为你需要更新一个导航集合,而另一篇文章是关于更新导航引用的。 一种更新集合的方法是这个:https://dev59.com/6W035IYBdhLWcg3wPdcS#5540956(虽然它是针对`DbContext`/EF>=4.1的,但思路和代码应该可以翻译到 ObjectContext/EF 4.0 上)。 - Slauma
感谢您对我的问题的耐心解答,我非常感激。 - BornToCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接