1

我将 .net 应用程序作为我大学的一个项目,但我遇到了自跟踪实体集的问题。我正在选择一条记录,将其通过 wcf 服务传递,进行一些更改并再次将其传递给服务器。在那里我想比较更改的内容,所以我再次从上下文中选择相同的记录(这是具有旧值的记录)并进行比较。然后,在比较我想在上下文中调用 ApplyChanges 与通过服务传递的实体之后,我得到一个错误:

AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前确保键值是唯一的。

我想这是因为两次加载相同的实体(更改之前和更改之后进行比较)。有没有更好的方法来比较更改(我需要在另一个数据库表中创建更改历史记录)?如果两个客户端获得相同的记录,并且第一个客户端更改它并想要存储到数据库中,这个错误是否也会出现?我使用.net 4.0。

4

1 回答 1

0

这不是使用 STE 的方式。STE 包装了很多逻辑,但它们无法处理附加到 context 的重复键

所以我可以想象两种解决方案:

  • 不要加载实体来比较更改。而是从您的 STE 应用更改并处理SavingChanges事件(或覆盖SaveChanges上下文)以从ObjectStateManager.
  • 在从 STE 应用更改之前尝试分离加载的实体。
于 2011-01-18T08:56:22.727 回答