NHibernate延迟加载和对象比较

mbu*_*bue 3 c# nhibernate lazy-loading

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

if (obj == null || !obj.GetType().Equals(GetType()))
Run Code Online (Sandbox Code Playgroud)

显然,类型比较将失败,因为obj是一个代理实例.我已经看过一些NHibernate-snippets,它们解开一个对象并返回真实实例.但是当我强制执行域驱动设计时,我不希望在我的域层中使用任何特定于ORM的代码.我还不能unproxy呼叫者侧[例如foo.Equals(Unproxy(巴))]作为呼叫者是这也不包含任何特定的ORM代码(所有NHibernate的依赖关系是由温莎注入)我的应用层的实例.

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

Tre*_*ley 5

解决这个问题的方法是做一个演员:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

演员的作品是因为proxy你的班级继承了(例如PersonProxy : Person)

空检查是不必要的,因为as如果obj为null或者不是可以作为人员转换的对象,则转换将仅返回null .

  • @mbue警告:这不适用于使用继承映射映射的类.请参见此处:http://stackoverflow.com/questions/3523686/issue-with-casting-proxies-when-using-nhibernate-table-per-subclass-inheritance (2认同)