entity framework对象引用对于相同的数据库对象是否相等

如果我从不同的地方查询“逻辑上”(在数据库中)相同的对象,entity framework是否返回相同的对象引用。

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

大多数ORM(包括Entity Framework和NHibernate)使用Identity Map Pattern来确保每个主键只有一个给定实体的实例。 身份映射由上下文确定范围,因此两个不同的上下文将创建两个引用同一实体的对象。 让实体实现IEquatable是一个好习惯,包括对等于运算符的覆盖,以便’==’或’!=’可以工作。 这比人们想象的要多得多。 看看这里的例子。