当调用AcceptChanges时,我得到以下错误:
AcceptChanges无法继续,因为该对象的键值与ObjectStateManager中的另一个对象冲突。在调用AcceptChanges之前,请确保键值唯一。
现在我已经在网上搜索了很久,但没有找到我想要的答案。
我知道他们是故意这样做的,所以你应该防止通过使用ID而不是entity对象来添加已经存在的实体,但我所处的情况是我根本不能这么做。
我有一个导入和一个导出,这是通用的,我可以提供任何实体对象,它将使其成为xml格式,反过来,我可以提供任何xml并获得正确的实体。我不能使用序列化程序,因为我必须将xml转换为自定义格式。
问题出在当我有更深的嵌套实体,这些实体之前已经被添加到主实体中,我不能在现场检查它,所以它们被添加了。导致同一实体可能被多次添加的问题。
当我更靠前并希望应用更改时,错误就会发生。
现在,考虑到我在防止“多次添加同一实体”-problem的问题上没有选择,我必须在添加它们之后处理它。
如何从ObjectStateManager中删除重复的实体,以便调用apply changes?
发布于 2013-01-04 22:39:38
如何从ObjectStateManager中删除重复的实体,以便调用apply changes?
只能通过搜索ObjectStateManager和解决重复项来手动执行。这就是为什么您应该在将实体添加到ObjectContext或ObjectStateManager.ObjectStateManagerChanged事件处理程序之前解决该问题的原因。
不管怎样,你问错了问题。即使您从ObjectStateManager中删除了重复的实体,也不能解决问题。删除实体只会破坏你的对象图。您还需要修复对已删除实体的所有引用,并将它们指向单个剩余的实体实例。
这个问题通常由序列化/反序列化直接处理,如果您自己编写它,也应该这样做。
https://stackoverflow.com/questions/14158865
复制相似问题