抱歉,如果这是一个愚蠢的问题,请原谅。我的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中发生的那样?如果一个实体作为另一个实体集合的一部分加载,它仍然是同一个对象吗?是否有规则/设置来管理此行为?
Find
时,会按优先顺序发生三件事情:1)EF 在本地缓存中查找对象,2)EF 在已添加的对象中查找,3)EF 从数据库加载数据。 - JohnyLEquals
... - bornfromaneggEquals
,它们仍然检测相等的引用而不是自定义相等性。或者以你的例子为例,它们在内部始终使用ReferenceEquals(entity1, entity2)
而不是entity1.Equals(entity2)
。 - Ivan Stoev