2

调用时AcceptChanges出现以下错误:

AcceptChanges无法继续,因为对象的键值与ObjectStateManager. 在调用之前确保键值是唯一的AcceptChanges

现在我在网上搜索了很多,但没有找到我想要的答案。

我知道他们是按设计制作的,因此您应该防止通过使用 ID 而不是实体对象来添加已经存在的实体,但我处于无法做到这一点的情况。

我有一个导入和导出,这是通用的,我可以给任何实体对象,它会使其成为 xml 格式,相反,我可以给任何 xml 并获得正确的实体。我不能使用序列化程序,因为我必须以自定义格式制作 xml。

问题在于,当我有更深的嵌套实体之前可能已经添加到主实体中时,我无法当场检查它,所以它们被添加了。导致同一实体可能被多次添加的问题。

当我进一步领先并希望应用更改时,就会发生错误。

现在考虑在防止“多次添加同一实体”的问题上我没有选择 - 问题,我必须在添加它们后处理它。

如何从 中删除重复的实体ObjectStateManager,以便调用应用更改?

4

1 回答 1

1

如何从 ObjectStateManager 中删除重复的实体,以便调用应用更改?

ObjectStateManager只能通过搜索和解析重复项手动进行。这就是为什么您应该在将实体添加到事件处理程序ObjectContext或在ObjectStateManager.ObjectStateManagerChanged事件处理程序中之前解决该问题的原因。

无论如何,您问的是错误的问题。即使您从中删除重复的实体ObjectStateManager也无法解决问题。删除实体只会破坏您的对象图。您还需要修复对已删除实体的所有引用并将它们指向单个剩余实体实例。

这个问题通常由序列化/反序列化直接处理,如果你自己写,你也应该这样做。

于 2013-01-04T14:39:38.277 回答