【问题标题】:How to remove duplicate entities in the objectstatemanager如何删除objectstatemanager中的重复实体
【发布时间】:2013-01-04 14:20:12
【问题描述】:

调用AcceptChanges 时出现以下错误:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# vb.net entity-framework


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多