在调试器下,我有一个DbContext.ChangeTracker.Entry(e)
返回带有 a 的条目的State
情况Detached
。当我在查找 时枚举DbContext.ChangeTracker.Entries()
底层证券的结果和条目时,我找到了一个带有(预期)的条目。ObjectContext
e
State
Unchanged
到底是怎么回事?
以下是一些额外的细节:
- 使用 POCO 实体。
- 更改跟踪已开启
- 代理创建已关闭
- 延迟加载已关闭
- 第一次保存实体时不会出现问题(例如添加到上下文中);将旧实体放入上下文然后尝试对其进行更改时发生。这是一个聚合根,包含许多不应更改的“参考”实体
Equals
在实体上被覆盖IEquatable<T>
并被实现。该代码由 T4 生成。- 我正在使用一个通用存储库实现,它以声明方式配置为生成保存规则(例如,是否应该添加、附加/修改、附加/未更改实体。它似乎以正确的顺序执行此操作。例如,添加了聚合根/attached last 因为首先附加它会带来处于修改状态的其他实体(首先添加那些未更改的实体可以防止这种情况发生)。