【发布时间】:2011-03-02 12:43:54
【问题描述】:
我遇到异常
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
我有一个分离的实体,并且在 ObjectStateManager 中也有键,这是我不明白的。这怎么可能?
我要做的是在实体从客户端(Asp MVC 控制器)返回时将其附加到上下文中。
如果我这样做
db.MyEntity.Attach(myEntity);
我得到了第一个例外。
我知道它是分离的,因为当我尝试调用时
db.MyEntity.Context.LoadProperty(myEntity, e => e.myProperty);
我感到我的实体已分离(应该是这样,为什么 ObjectStateManager 中的键是?)。
所以总结一下,我认为我的实体在 ObjectStateManager 中有键并且是分离的。我如何附上它?我错过了什么?或者我误解了什么?
感谢您的任何建议。
编辑: 正如@Ladislav Mrnka 正确陈述的那样,我的问题是我在一个请求处理中加载了具有相同 ID 的实体。我这样做是因为我想要实体的原始值进行比较,如果有问题我想将它显示给用户,但我需要附加它,这是有问题的,因为 ObjectStateManager 中仍然存在具有旧值的实体。我附加了这个实体,因为我还需要显示延迟加载的属性。这样做的正确方法是什么?只是为了对实体进行新的查询?
【问题讨论】:
-
您是否为每个请求处理创建新的上下文?你只调用一次 Attach 吗?您是否在同一请求处理中加载了具有相同 id 的实体?
-
我为每个请求创建新的上下文。我只附加一次,但你是对的,我在同一个请求中加载具有相同 ID 的实体!!! (这可能是问题所在!)
标签: c# entity-framework-4