需要帮助处理具有相同键的对象

时间:2011-03-02 12:43:54

标签: c# entity-framework-4

我发现异常

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先生所说,我的问题是我在一个请求处理中加载具有相同id的实体。我这样做是因为我想要实体的原始值进行比较,如果有问题我想将它显示给用户,但是我需要附加它,这是有问题的,因为在ObjectStateManager中仍然存在具有旧值的实体。我附加这个实体因为我还需要显示延迟的Loaded属性。做到这一点的正确方法是什么?只是为实体创建新查询?

1 个答案:

答案 0 :(得分:2)

您无法加载具有相同ID的实体和附加实体。您必须分离已加载的一个或将更改合并到已加载的一个(还要检查ApplyCurrentValues方法)。