c# - EF 核心实体平等

标签 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 中会发生什么?如果一个实体作为集合的一部分加载到另一个实体上,它仍然是同一个对象吗?是否有管理此行为的规则/设置?

最佳答案

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

关于c# - EF 核心实体平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47910225/

相关文章:

c# - EF 模型类是否正确?

c# - Entity Framework : Model Contain A list(navigational properties) of three items of type= itself , 给出错误。 (可能是外键映射错误)

c# - 鼠标按下事件触发两次(WPF)

C# - MVC 4 多对多复选框值传递给另一个 View

c# - 从 ASP.NET Web Api 中的中间件访问 JsonOptions

c# - Entity Framework - 实体类型之间的关联已被切断问题

linq - LINQ 查询中的 DayOfWeek

entity-framework - 如何改进这个 Entity Framework Core 查询?

c# - Visual Studio 解决方案中使用的 .vs 文件夹是什么?

c# - 匿名委托(delegate)事件监听器会阻止垃圾回收吗?