【问题标题】:Entity Framework retrieving different instances实体框架检索不同的实例
【发布时间】: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


【解决方案1】:

问题是由于 MergeOption 设置不正确造成的。在这种特殊情况下,它被错误地设置为 NoTracking。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多