0

我在实体框架场景中使用 DTO 和转换器。我想更新一个实体。所以我把这个声明: databasecontext.Tablename(s).Attach(entityobj); 每当它到达这里,程序就会以这个错误结束: An entity with the same identity already exists in this EntitySet

我觉得我可以 databasecontext.Tablename(s).Detach(entityobj); 在我再次打电话给 Attach 之前说一下来解决这个问题。但是程序仍然在 Attach 语句上失败。

我错过了什么?数据库上下文中的哪个方法调用域服务中的更新?

4

2 回答 2

1

问题不清楚。您没有提到您的数据库上下文存在多长时间以及何时将实体加载到上下文中。

但是根据您的问题,我猜您已加载实体将其作为 DTO 传递到某处,并且当返回 DTO 时,您仍在使用相同的上下文。您将 DTO 转换为实体,并尝试再次附加 => BANG 异常。不能将同一实体两次放入上下文中。尝试改用 ObjectContext.ApplyCurrentValues (EF 4.0) 或 ApplyPropertyChanges (EF 1.0)。

于 2010-10-02T09:57:25.540 回答
0

看起来您在进行更改时保持上下文打开。

在这种情况下,您不需要将对象重新附加到上下文。

如果打开上下文,从上下文中获取对象,然后关闭上下文,对对象进行一些更改,然后打开一个新上下文。在这种情况下,您需要将对象附加到上下文。

于 2010-10-02T09:54:19.697 回答