在调试器下,我有一个情况,其中DbContext.ChangeTracker.Entry(e)
返回State
的Detached
的条目。当我列举DbContext.ChangeTracker.Entries()
的结果和ObjectContext
查找e
的条目时,我找到State
的Unchanged
(预期)的条目。DbContext.ChangeTracker,DbContext.Entry()不一致
这是怎么回事?
这里有一些额外的细节:
- 使用POCO实体。
- 变化跟踪是上
- 代理创建熄灭
- 迟缓装载是关闭
- 节省了第一时间(例如增加上下文)的实体时,不会发生问题;在将旧实体置于上下文中然后尝试对其进行更改时发生。这是具有许多不应该改变的“参考”实体的聚合根
Equals
在实体上被覆盖,IEquatable<T>
被实施。该代码由T4生成。- 我正在使用一个通用的存储库实现,它声明性地配置为生成保存规则(例如,是否应该添加实体,附加/修改,附加/不变),它似乎是以正确的顺序执行此操作,例如聚合根被添加/附最后,因为附接它首先使在其他实体在修改状态(添加那些首先作为不变防止这一点)。
你叫'DetectChanges'吗? – SLaks
@SLaks - 不,这可能是我必须做的事情吗? – Kit
提供有关您的情况的更多细节(您做了什么来获得这种不一致)。还要确保e和'ChangeTracker'中的实例相同,并且你没有重写实体上的'Equals'方法。 –