4

我有一个对象Customer,导航属性为Days(天是一个单独的表,其中有 - day_id,customer_id - FK)。如何更新EF中的导航属性/相关表?

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

这只更新了Customer的标量属性,而不是日期。有没有更新日期的智能方法? (没有在几天手动迭代..)?如果没有 - 是否有更新第二个表格(天)的最佳做法? 如果可能的话,请写明确使用的代码。

p.s.我目前使用EF 4.0

回答

1

不,你不能在没有手动迭代相关实体的情况下做到这一点。看看这个问题和答案可能会有所帮助。 MVC Entity Framework modifying child entities

+0

我得到的印象是它可能从这个[post](http://stackoverflow.com/questions/9606866/cannot-get-relationship-to-update-for-navigation-properties-in-entity - 框架),但无法实现它,这篇文章与我描述的情况无关吗? – BornToCode

+1

@BornToCode:是的,您的评论中链接的帖子是不相关的,因为您有一个导航*集合*更新,另一篇文章是关于更新导航*参考*。更新集合的方法是这样的:http://stackoverflow.com/a/5540956/270591(虽然它是'DbContext'/EF> = 4.1,但是这个想法和代码应该可以转换为'ObjectContext'/EF 4.0。) – Slauma

+0

感谢您耐心解答我的问题,我很感激。 – BornToCode

4

如果你想要一个简单和容易的方式来处理断开连接的对象,你可以使用GraphDiff库。

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

这将插入或更新的客户对象,同时更新Days收藏为好。

+1

只是为了指出这一点,你需要将'myContext.Configuration.AutoDetectChangesEnabled'设置为true(如果它被禁用)。 – fabriciorissetto