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

C# 对于相同的数据库对象,实体框架对象引用是否相等,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,如果我从不同的位置查询“逻辑”(在数据库中)相同的对象,实体框架是否返回相同的对象引用 例如,我查询了名为Joe Black的客户(现在假设我知道数据库中只有一个Joe Black) Customer c=选择。。。布拉布拉。。。姓名==乔·布莱克在代码的其他地方,我查询了Customer c2=select。。。哪里ID==5其中5是Joe Black的ID。我知道在数据库中,它们映射到同一个对象,但它们在代码级别是否也映射到同一个对象?那么c1等于c2吗?我有列表要合并并检查对象的逻辑相等性

如果我从不同的位置查询“逻辑”(在数据库中)相同的对象,实体框架是否返回相同的对象引用

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

大多数ORM,包括Entity Framework和NHibernate,使用确保每个主键只有一个给定实体的实例。标识映射的范围由上下文决定,因此两个不同的上下文将创建引用同一实体的两个对象。让实体实现IEquatable是一种很好的做法,包括对相等运算符的重写,以便“==”或“!=”可以会有用的。这比人们想象的要复杂得多。请看一个例子。

通过问题回答,谢谢。这意味着我的工作更简单,但我不知道如何为EntityFramework自动生成的类添加实现方法或重载运算符。不管怎样,我再次访问了我的数据库,它成功了。所以EF也能处理这个问题。