【问题标题】:How to correctly update entities in EF4 using POCO and custom ObjectContext?如何使用 POCO 和自定义 ObjectContext 正确更新 EF4 中的实体?
【发布时间】:2010-12-21 06:18:05
【问题描述】:

使用here 描述的技术,我有一个简单的 POCO EF4 模型启动并运行。保存新的和删除的很简单(分别使用AddObject()DeleteObject())。但是我发现更新对象的唯一方法是检索对象的存储版本并使用正在保存的对象中的新值手动更新其属性。肯定有更好的方法吗?

我的 ObjectContext 已断开连接 - 换句话说,我为模型上的每个操作使用一个新的 ObjectContext 实例。

谢谢。

【问题讨论】:

    标签: c# entity-framework-4


    【解决方案1】:

    使用存根技术

    public void UpdateOrder(Order o)
    {
       var stub = new Order { Id = o.OrderId }; // create stub with EntityKey
       ctx.Orders.Attach(stub); // attach stub to graph
       ctx.ApplyCurrentValues("Orders", o); // override stub with values.
       ctx.SaveChanges();
    }
    

    如果实体已经在图表中,你会得到一个 OSM 异常(带有键的实体已经存在)。

    我通过首先检查图形中是否存在对象 (TryGetObjectStateEntry) 来抵消这种情况,如果不存在则仅附加。

    【讨论】:

    • 谢谢,看起来不错。您的意思是“如果 stub 已经在图中”,还是 Order o 已经在图中?
    • 要么。模型上的每个实体都有一个唯一标识它的“EntityKey”——就像一个“OrderID”。如果该实体已经在图中(通过先前的 .Attach 或从查询中检索)具有相同的实体键,它将引发异常。如果您每次都说您是 OC 的新手,那应该不是问题(尽管您没有提到这是否是 Web 应用程序/Windows/等)
    • 它是 MVC,它似乎更新得很好,并且使用你的技术没有抛出任何 EM。
    • 顺便问一下,你知道有什么好的 EF 书籍或资源吗?你似乎知道你的东西.. :)
    • 呵呵,是的,我没问题 - 我只是一个快速学习者,只在 EF 工作了几个月。 高度推荐 Julia Lerman 的书 - amazon.com/Programming-Entity-Framework-Julia-Lerman/dp/…。这是你唯一需要的关于 EF 的书。她摇摆不定。
    猜你喜欢
    • 2011-06-04
    • 2011-07-30
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多