EF核心实体平等

时间:2017-12-20 16:12:22

标签: c# entity-framework entity-framework-core

很抱歉,如果这是一个愚蠢的问题,我对ORM的大部分经验都不是EF,在线查看这个问题会让我感觉很糟糕很多。它几乎就像"参考"对不同的人来说意味着不同的事情......

如果我这样编写代码:

using (var db = new DbContext())
{
    var entity1 = await db.Foos.FirstOrDefaultAsync(x => x.Id == 1);
    var entity2 = await db.Foos.FirstOrDefaultAsync(x => x.Id == 1);
    return entity1.Equals(entity2);
}

返回true。由于我的实体是引用类型,引擎盖下的Equals应该是Object.ReferenceEquals()来电。

我想知道的是,这是否可靠,即在上下文中由特定数据库记录表示的任何实体是否总是在引用上相等,或者它是否可以退出"缓存,按需重新加载,并有一个新的参考,如在一些不太复杂的ORM中发生的事情?如果实体作为集合的一部分加载到另一个实体上,它仍然是同一个对象吗?是否存在管理此行为的规则/设置?

1 个答案:

答案 0 :(得分:1)

正如@IvanStoev在评论中指出的那样,引用一致性是设计和EF的核心部分,因此数据库中的同一对象应始终引用数据库上下文中的相同对象...至少在范围内您正在使用的特定数据库上下文。如果您正在处理多个数据库上下文,则为YMMV。