如何删除objectstatemanager中的重复实体

时间:2013-01-04 14:20:12

标签: c# vb.net entity-framework

调用AcceptChanges时出现以下错误:

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

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

我知道他们是按照设计制作的,所以你应该通过使用ID而不是实体对象来防止添加已经存在的实体,但我处于一种我根本无法做到的情况。

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

问题出在我有更深层次的嵌套实体之前可能已经添加到主实体中,我无法在现场检查它们以便添加它们。导致可能多次添加同一实体的问题。

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

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

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

1 个答案:

答案 0 :(得分:1)

  

如何从ObjectStateManager中删除重复的实体,所以   我可以致电申请变更吗?

仅手动搜索ObjectStateManager并解决重复项。这就是为什么在将实体添加到ObjectContextObjectStateManager.ObjectStateManagerChanged事件处理程序之前解决该问题的原因。

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

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