【问题标题】:How to update navigation properties / related tables in EF?如何更新 EF 中的导航属性/相关表?
【发布时间】:2012-09-11 20:47:37
【问题描述】:

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

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

这仅更新了客户的标量属性,而不是天数。有什么聪明的方法可以更新 Days 吗? (无需在几天内手动迭代..)?如果没有 - 是否有更新第二张表(天)的最佳做法? 如果可能请写出应该使用的显式代码。

附言我目前使用的是 EF 4.0

【问题讨论】:

    标签: entity-framework entity-framework-4 sql-update scalar-context


    【解决方案1】:

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

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

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

    【讨论】:

    • 只是要指出,要使其工作,您需要将 myContext.Configuration.AutoDetectChangesEnabled 设置为 true(如果它被禁用)。
    【解决方案2】:

    不,如果不对相关实体进行手动迭代,您就无法做到这一点。看看这个问题和答案可能会有所帮助。MVC Entity Framework modifying child entities

    【讨论】:

    • 我从post 得到的印象是它应该是可能的,但无法实现它,那篇文章与我描述的情况无关吗?
    • @BornToCode:是的,您评论中链接的帖子不相关,因为您有一个导航 collection 要更新,另一篇帖子是关于更新导航 reference 。一种更新集合的方法是这样的:stackoverflow.com/a/5540956/270591(虽然它适用于DbContext/EF>=4.1,但这个想法和代码应该可以翻译成ObjectContext/EF 4.0。)
    • 感谢您耐心解答我的问题,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2018-04-03
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多