【发布时间】:2010-09-20 21:57:10
【问题描述】:
我有一个基类DomainObject 用于我在NHibernate 中使用的所有业务对象。它包含Id 属性。
public abstract class DomainObject
{
public virtual int Id { get; private set; }
}
我想写一个IEqualityComparer 来比较我的域对象。如果两个对象具有相同的Id 并且是相同类型的对象,则它们应该相等。但是,当我使用GetType() 获取对象的类型时,它将返回 NHibernate 代理类型。所以这段代码:
bool IEqualityComparer.Equals(object x, object y)
{
// null checking code skipped here
if(x is DomainObject && y is DomainObject)
{
return ((DomainObject) x).Id == ((DomainObject) y).Id
&& x.GetType() == y.GetType();
}
return x.Equals(y);
}
不能正常工作,因为x is Asset的类型是y is AssetProxy21879bba3e9e47edbbdc2a546445c657的类型。
那么,如何获取可能是 NHibernate 代理对象的对象的实体类型?即在上面的示例中 Asset 而不是 AssetProxy21879bba3e9e47edbbdc2a546445c657?
【问题讨论】:
-
我 99% 确定这是重复的,但我现在懒得去搜索它 :-)
-
请给我看它重复的那个,我在stackoverflow上找遍了。
标签: nhibernate