gpt4 book ai didi

c# - 如何删除对象状态管理器中的重复实体

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:21 26 4
gpt4 key购买 nike

调用 AcceptChanges 时出现以下错误:

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

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

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

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

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

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

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

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

最佳答案

How can I delete duplicate entities from the ObjectStateManager, so that I can call apply changes?

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

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

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

关于c# - 如何删除对象状态管理器中的重复实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com