【问题标题】:Do entity framework object references equal for same database objects相同数据库对象的实体框架对象引用是否相等
【发布时间】:2011-07-01 01:11:48
【问题描述】:

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

例如,我查询了名为 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 对象是否可以很好地使用它,或者我应该编写自定义比较器类。

【问题讨论】:

    标签: c# .net linq entity-framework


    【解决方案1】:

    包括实体框架和 NHibernate 在内的大多数 ORM 都使用 Identity Map Pattern 来确保每个主键只有一个给定实体的实例。身份映射由上下文限定,因此两个不同的上下文将创建两个引用同一实体的对象。让实体实现 IEquatable 是一种很好的做法,包括对等式运算符的覆盖,以便 '==' 或 '!=' 可以工作。这比人们想象的要复杂得多。以here 为例。

    【讨论】:

    • 回答问题,谢谢。所以这意味着我的工作更容易,但我不知道如何为 Entity Framework 自动生成的类添加实现方法或重载运算符。无论如何,再次访问我的数据库并且它有效。所以 EF 也可以处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多