如何使用 POCO 和自定义 ObjectContext 正确更新 EF4 中的实体?

发布于 2024-10-08 17:02:07 字数 442 浏览 1 评论 0原文

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

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

谢谢。

Using the technique described here I have a simple POCO EF4 model up and running. Saving new and deleting is straightforward (using AddObject() and DeleteObject() respectively). But the only way of updating objects I have found is to retrieve the stored version of the object and manually update its properties with new values from the object being saved. Surely there is a better way?

My ObjectContext is disconnected - in otherwords, I use a new ObjectContext instance for each operation on the model.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心如狂蝶 2024-10-15 17:02:07

使用存根技术

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) 并仅在不存在时才附加来解决此问题。

Use the stub technique:

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();
}

If the entity is already in the graph, you will get an OSM exception (entity with key already exists).

I counteract this by checking if the object exists in the graph first (TryGetObjectStateEntry) and only attaching if it doesn't.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文