您好我正在尝试在 ObjectContextManager 中附加多个对象并尝试将它们的状态设置为“已添加”模式。这些对象具有一些导航属性,当我在附加第一个对象后尝试附加任何对象时。它给我带来了错误
ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
原因似乎很明显,但它的解决方案是什么。
请指导
您好我正在尝试在 ObjectContextManager 中附加多个对象并尝试将它们的状态设置为“已添加”模式。这些对象具有一些导航属性,当我在附加第一个对象后尝试附加任何对象时。它给我带来了错误
ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
原因似乎很明显,但它的解决方案是什么。
请指导
通过调用Attach
或AddObject
在实体上,您实际上是附加或添加整个对象图(EF 遍历导航属性并对每个相关属性执行操作)。当您尝试添加或附加已附加或作为对象图的一部分添加的实体时,您将收到此异常。解决方案是了解您的数据模型并调用AddObject
或Attach
仅用于脱节的对象图。
您应该使用随机 Id 初始化您添加/附加的新实体的 Id(例如Guid.NewGuid().GetHashCode()
,如果您使用 Int32 作为 Id 类型)
否则,让所有实体的默认 ID 为 0,当您附加实体时,ObjectStateManager 也会抛出异常。