【发布时间】:2011-05-25 04:37:59
【问题描述】:
我有一个简单的要求(所以我想...!)
我有一个由 Order、OrderLine、Product 组成的模型。
我想创建一个订单并添加 OrderLines(每个 OrderLine 都与一个产品相关)。我创建 Order 并向其添加新的 OrderLines。在帖子之间,我将 Order 实体存储在 Session(或 ViewState)中。只是为了让你知道我已经添加了对二进制序列化的支持,效果很好。
因此关系是 Order > OrderLine(s) > Product。
您可能已经猜到问题出在哪里 - 当我 SaveChanges() 时,我得到通常的“AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。”错误。
我在网上参考了许多文章,但似乎没有一篇文章处理这种情况(我有两个以上实体的关系),例如http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx.
这肯定是一个非常普遍的要求吧?有没有人用实体框架做同样的事情(并且不使用 DTO 等)?
干杯 - 帮助! :)
尼克
【问题讨论】:
-
“跨多个帖子”是什么意思?这是一个网络应用程序吗?如果是这样,您不需要自我跟踪实体,也不应将其存储在会话中。您应该尊重网络的无状态特性。 STE 适用于多层应用程序(例如 WCF -> Silverlight)
-
谢谢。是的,这是一个 Web 应用程序,我的意思是跨页面请求。我想使用 EF 生成的 Order 实体来构建订单(添加订单行、注释等)。为什么我不应该?我应该怎么做 - 通过创建我自己的“订单”实体(类),使用它,然后在保存时复制到新的 EF 订单实体?考虑到我有一个了解关联等的现成课程,这似乎需要做很多额外的工作。在这种情况下你会建议什么? (我明白使用 STE 可能不合适)
标签: asp.net entity-framework entity-framework-4 self-tracking-entities