2011-03-02 52 views
0

林葛亭例外需要帮助处理对象使用相同的密钥

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

我得到EXCETION我的实体分离(这是应该的,为什么在ObjectStateManager的关键?)。

因此,总结一下,我认为我有在ObjectStateManager键和分离的实体。我如何附加它?我错过了什么?或者我误解了一些东西?

谢谢你的任何建议。

编辑: 作为@Ladislav Mrnka正确地说我的问题是我在一个请求处理中加载具有相同ID的实体。我这样做是因为我想要比较的实体的原始值,如果有问题我想要显示回给用户,但我需要附加它是问题,因为存在旧值的实体仍然存在于ObjectStateManager中。我附加这个实体,因为我也需要显示懒惰加载属性。什么是正确的方法来做到这一点?只是为实体做出新的查询?

+1

您是否为每个请求处理创建新的上下文?你只打一次附件吗?你是否在相同的请求处理中加载了具有相同ID的实体? – 2011-03-02 12:54:38

+0

我为每个请求创建新的上下文。我只附加一次,但你是正确的,我负载同一个ID相同的请求实体! (这可能是问题!) – Eduard 2011-03-02 12:58:54

回答

2

您不能使用相同的Id加载实体并附加实体。您必须分离已加载的文件或将更改合并到已加载的文件中(也请检查ApplyCurrentValues方法)。