【发布时间】:2011-11-17 17:04:16
【问题描述】:
在调试器下,我遇到DbContext.ChangeTracker.Entry(e) 返回一个带有State 的Detached 的条目的情况。当我在查找e 时枚举DbContext.ChangeTracker.Entries() 的结果和底层ObjectContext 的条目时,我发现一个带有State 的条目Unchanged(预期)。
发生了什么事?
这里有一些额外的细节:
- 使用 POCO 实体。
- 更改跟踪已开启
- 代理创建已关闭
- 延迟加载已关闭
- 第一次保存实体时不会出现问题(例如,添加到上下文中);将旧实体放入上下文然后尝试对其进行更改时发生。这是一个聚合根,其中包含许多不应更改的“参考”实体
-
Equals在实体上被覆盖,IEquatable<T>被实现。该代码由 T4 生成。 - 我正在使用一个通用存储库实现,它以声明方式配置为生成保存规则(例如,是否应添加、附加/修改、附加/未更改实体。它似乎以正确的顺序执行此操作。例如聚合root 是最后添加/附加的,因为首先附加它会使其他实体处于修改状态(首先添加那些未更改的实体可以防止这种情况发生)。
【问题讨论】:
-
你打电话给
DetectChanges了吗? -
@SLaks - 不。这可能是我必须做的事情吗?
-
提供更多关于你的情况的细节(你做了什么来得到这种不一致)。还要确保 e 与
ChangeTracker中的实例相同,并且您没有覆盖实体上的Equals方法。 -
@LadislavMrnka - 我会补充细节。我已经解决了这个问题,但我不知道如何,所以值得更新这个问题,因为我不知道根本原因。
标签: entity-framework-4.1 ef-code-first change-tracking