我正在将.net应用程序作为我的Univeristy项目,我遇到了自我跟踪实体集的问题。我正在选择一条记录,将其传递给wcf服务,进行一些更改并再次将其传递给服务器。在那里我想比较改变的内容,所以我再次从上下文中选择相同的记录(这是具有旧值的记录)并进行比较。然后,在比较之后我想在上下文中调用ApplyChanges与通过服务传递的实体,并且我得到一个错误:
AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突。在调用AcceptChanges之前,请确保键值是唯一的。
我想这是因为加载相同的实体两次(在更改之前和更改之后进行比较)。有没有更好的方法来比较更改(我需要在另一个db表中更改历史记录)?如果两个客户端获得相同的记录,并且第一个更改它并希望存储到数据库中,那么这个错误也不会出现问题吗?我正在使用.net 4.0。
答案 0 :(得分:0)
这不是使用STE的方法。 STE包含了很多逻辑,但它们无法处理duplicate keys attached to context。
所以我可以想象两个解决方案:
SaveChanges
)以从ObjectStateManager
获取应用的更改。