对于相同的数据库对象,实体框架对象引用是否相等

本文关键字:对象引用 框架 是否 实体 于相同 数据库 对象 | 更新日期: 2023-09-27 18:00:45

如果我从不同的地方查询"逻辑上"(数据库中)相同的对象,实体框架是否返回相同的对象引用。

例如,我查询了名为Joe Black的客户(假设现在我知道数据库中只有一个Joe Black)Customer c = select ... blabla where ... Name == Joe Black...;,在代码的其他地方,我查询了Customer c2 = select... where.. ID==5,其中5是Joe Black的ID。我知道在数据库中,它们映射到同一个对象,但它们在代码级别上也映射到相同的对象吗?那么c1等于c2吗?我有列表要合并并检查对象的逻辑相等性(我现在无法访问数据库),我想知道实体框架对象是否能很好地与它配合使用,或者我应该编写自定义比较器类。

对于相同的数据库对象,实体框架对象引用是否相等

大多数ORM,包括实体框架和NHibernate,都使用身份映射模式来确保每个主键只有一个给定实体的实例。标识映射的作用域由上下文决定,因此两个不同的上下文将创建两个引用同一实体的对象。让实体实现IEquatable是一种很好的做法,包括对相等运算符的重写,以便'=='或'!='将起作用。这比人们想象的要复杂得多。以这里为例。