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

Can*_*ğlu 9 .net c# linq entity-framework

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

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

eul*_*rfx 14

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