调用AcceptChanges
时出现以下错误:
AcceptChanges
无法继续,因为对象的键值与ObjectStateManager
中的另一个对象冲突。在致电AcceptChanges
之前,请确保键值是唯一的。
现在我在网上搜索了很多,但没找到我想要的答案。
我知道他们是按照设计制作的,所以你应该通过使用ID而不是实体对象来防止添加已经存在的实体,但我处于一种我根本无法做到的情况。
我有一个导入和导出,这是通用的,我可以给任何实体对象,它会使它成为一个xml格式,反过来我可以给任何xml并获得正确的实体。我无法使用序列化程序,因为我必须以自定义格式制作xml。
问题出在我有更深层次的嵌套实体之前可能已经添加到主实体中,我无法在现场检查它们以便添加它们。导致可能多次添加同一实体的问题。
当我更进一步并希望应用更改时,错误就会发生。
现在考虑我在防止“多次添加同一个实体”问题上没有选择 - 问题,我必须在添加后处理它。
如何从ObjectStateManager
删除重复的实体,以便我可以调用应用更改?
答案 0 :(得分:1)
如何从ObjectStateManager中删除重复的实体,所以 我可以致电申请变更吗?
仅手动搜索ObjectStateManager
并解决重复项。这就是为什么在将实体添加到ObjectContext
或ObjectStateManager.ObjectStateManagerChanged
事件处理程序之前解决该问题的原因。
无论如何,你提出错误的问题。即使您从ObjectStateManager
删除重复的实体,也无法解决问题。删除实体只会破坏对象图。您还需要修复对已删除实体的所有引用,并将它们指向单个剩余实体实例。
这个问题通常是通过序列化/反序列化直接处理的,如果你自己编写,你也应该这样做。