简体   繁体   English

EF核心实体平等

[英]EF Core Entity Equality

Sorry if this is a dumb question, most of my experience with ORMs has not been EF, and looking this up online gets me a lot of bad hits. 很抱歉,如果这是一个愚蠢的问题,我对ORM的大部分经验都不是EF,在网上查看这个问题会让我受到很多不好的打击。 It's almost like "reference" means different things to different people... 它几乎像“参考”对不同的人意味着不同的东西......

If I write code like so: 如果我像这样编写代码:

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);
}

This returns true . 这返回true Since my entity is a reference type, the Equals under the hood should be an Object.ReferenceEquals() call. 由于我的实体是引用类型,引擎盖下的Equals应该是Object.ReferenceEquals()调用。

What I want to know is, is this reliable, ie will any entity represented by a particular database record in a context always be referentially equal, or can it "drop out" of the cache, get reloaded on demand and have a new reference like what happens in some less sophisticated ORMs? 我想知道的是,这是否可靠,即上下文中特定数据库记录所代表的任何实体是否总是相等,或者它可以“退出”缓存,按需重新加载并有一个新的引用,如在一些不太复杂的ORM中会发生什么? If an entity is loaded as part of a collection on another entity, is it still the same object? 如果实体作为集合的一部分加载到另一个实体上,它仍然是同一个对象吗? Are there rules/ settings that govern this behavior? 是否存在管理此行为的规则/设置?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM