【发布时间】:2011-12-28 19:29:57
【问题描述】:
我无法将对象添加到 ObjectContext,即使我确信它没有附加并且它没有与不同的上下文相关联
我正在使用带有 POCO 对象的 EF 4。
如果我尝试
_currentContext.ObjectStateManager.GetObjectStateEntry(entityIn)
然后我得到错误
The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'System.Data.Entity.DynamicProxies.OrderItem_7D361CB49D75AA90681B4BA3F924139ECB0FC1426E38E90C7B884A4E9CD777DF'.
很公平,它不存在。所以如果我尝试附加它
_currentContext.AttachTo("OrderItems", entityIn)
然后我得到
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
我怎么会同时出现这两个错误。他们不矛盾吗??如何将其附加到上下文中?
编辑
整个应用程序只有一个上下文。模式是
- 通过存储库对象的所有调用。
- 对象从工厂类中获取其对象上下文。
- 这个工厂类要么创建上下文,要么从请求对象中获取上下文,从而保证页面生命周期只使用一个上下文
在任何时候,如果您对上下文对象进行两个实例化,则每个实例的哈希码都是相同的。
【问题讨论】:
-
您尝试附加的 OrderItem 是否引用了一个订单(或另一个实体)并且已经附加了具有相同密钥的订单?那么它可能是这样的问题:stackoverflow.com/questions/7938728/…
-
Order @Slauma 的猜测不错。你见过我的模式吗(笑话)。大概就是这样,谢谢。但是鉴于这种情况,如果基础订单已经附加并且会导致此问题,我该如何附加订单项目。我错过了一些明显的东西吗?
-
如果附加的Order 和OrderItem 引用的Order 是同一个对象就没有问题。但是此错误表明您有一个附加的 Order (hash=x, key=1) 和另一个具有相同键 (hash=y, key=1) 的 Order 对象。如果你有这个,你基本上必须用附加的 Order 替换分离的 Order(由 OrderItem 引用),或者在附加之前将 OrderItem 对 Order 的引用设置为
null。我的猜测也可能是错误的,我不确定这个关于IEntityChangeTracker多个实例的错误是否与我链接的答案的原因相同。 -
再次感谢您。当我将任何填充的导航属性设置为空时,它会出错。我会继续调查谢谢
-
也许你不允许你的外键可以为空。也就是说,不要将对象设置为导航属性,而是设置相应的 ID 字段。
标签: c# asp.net entity-framework poco objectcontext