c# - NHibernate延迟加载和对象比较

标签 c# nhibernate lazy-loading

配置延迟加载后,我遇到了有关对象比较的问题。我在每个域实体类中重写的 Equals 方法包含以下行:

if (obj == null || !obj.GetType().Equals(GetType()))

显然,类型比较将失败,因为 obj 是一个代理实例。我已经看到一些 NHibernate-snippets 取消代理对象并返回真实实例。但是当我强制执行域驱动设计时,我不希望在我的域层中有任何特定于 ORM 的代码。 我也无法在调用方取消代理实例 [例如foo.Equals(Unproxy(bar))] 因为调用者是我的应用程序层,它也不包含任何特定于 ORM 的代码(所有 NHibernate 依赖项都由 Windsor 注入(inject))。

长话短说:是否有任何通用代码来获取真实实例?

最佳答案

解决这个问题的方法是进行强制转换:

public class Person
{
    public int Id { get; set; }

    public override bool Equals(object obj)
    {
        var person = obj as Person;

        if (person == null)
        {
            return false;
        }

        return person.Id == this.Id;
    }
}

转换有效是因为 proxy 继承自您的类(例如 PersonProxy : Person)

null 检查是不必要的,因为如果 obj 为 null 或不是可以转换为人的对象,则 as 转换将只返回 null。

关于c# - NHibernate延迟加载和对象比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12913528/

相关文章:

c# - 将 SharpArch 与 C# Windows 应用程序一起使用的示例?

c# - 如何以编程方式启用/禁用 Azure Function

Java 相当于 C# 泛型数组声明?

c# - 非泛型中 'default' 关键字的用途和用途

javascript - 使用 bLazy 延迟加载和多服务图像

java - 避免隐式急切加载集合 stub ?

javascript - 如何使用SeleniumWebdriver和Python通过滚动找到网页上的所有元素

c# - 如何了解错误发生的条件(StackTrace wp7)?

sql-server - 如何从 SQL Server 存储过程中获取返回值到 nHibernate?

nhibernate - SessionFactory - 多个数据库的一个工厂