我发现异常
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属性。做到这一点的正确方法是什么?只是为实体创建新查询?
答案 0 :(得分:2)
您无法加载具有相同ID的实体和附加实体。您必须分离已加载的一个或将更改合并到已加载的一个(还要检查ApplyCurrentValues
方法)。