【发布时间】:2012-01-03 19:34:42
【问题描述】:
我假设对于给定的 ObjectContext,如果我执行查询并检索一个唯一对象(即使用主键),使用相同 ObjectContext 的第二个查询会给我非常相同的实例 对象。
但是,情况不一定如此。
有人能解释一下吗?
谢谢!
下面是一些代码: (在这种情况下,我有一个复合键)
var x = context.MyEntity.FirstOrDefault(e => e.Key1 == 1 && e.Key2 == 5);
var y = context.MyEntity.FirstOrDefault(e => e.Key1 == 1 && e.Key2 == 5);
var isSame = x == y;
更新
我相信这个问题的答案在于实体的 MergeOption。我注意到那些不工作的设置为 NoTracking,而不是默认的 AppendOnly 选项。这可能是我遇到问题的根源。
【问题讨论】:
-
每个人的实际查询是什么。你可以根据你的问题回答你自己的问题。
-
Entity Framework 为其缓存中的每个唯一实体键维护一个唯一条目(来源:msdn.microsoft.com/en-us/library/bb896269.aspx)。因此,除非您更改实体键或从缓存中删除第一个对象,否则这不应该发生。你有重现你观察到的行为的代码吗?
-
是的,我有代码——我更新了我的问题。
-
@Fernando 你能检查一下 x 和 y 都有什么 EntityKey 吗? (我也认为它应该是 e.Key == 5?)
-
@Fernando:是的,MergeOption.NoTracking 将所有实体保持在分离状态,它们不会保存在上下文的缓存中,因此上下文不能再次返回相同的对象。
标签: c# entity-framework entity-framework-4