我在实体框架场景中使用DTO和转换器。我想更新一个实体。所以我把这句话说:
databasecontext.Tablename(s).Attach(entityobj);
每当它到达此处时,程序以此错误结束:
An entity with the same identity already exists in this EntitySet
。
我觉得我可以通过说databasecontext.Tablename(s).Detach(entityobj);
来解决这个问题。
在我再次打电话给Attach之前。但该程序仍然在Attach语句中失败。
我错过了什么?数据库上下文中的哪个方法调用域服务中的更新?
答案 0 :(得分:1)
问题不明确。您没有提到数据库上下文存在多长时间以及何时将实体加载到上下文中。
但是基于你的问题,我猜你已经加载了实体作为DTO传递到某个地方,当DTO被返回时你仍然使用相同的上下文。您将DTO转换为实体,并且您尝试再次附加=> BANG例外。同一个实体不能两次放入上下文中。尝试使用ObjectContext.ApplyCurrentValues(EF 4.0)或ApplyPropertyChanges(EF 1.0)。
答案 1 :(得分:0)
看起来您在进行更改时保持上下文处于打开状态。
在这种情况下,您无需将对象重新附加到上下文中。
如果打开上下文,从上下文中获取对象,然后关闭上下文,对该对象进行一些更改,然后打开一个新上下文。在这种情况下,您需要将对象附加到上下文。