我定义:
[ActiveRecord("BaseEntity", Lazy = true )]
class BaseClass {}
[ActiveRecord("DerivedEntity", Lazy = true )]
class DerivedClass : BaseClass {}
在DB BaseEntity中,DerivedEntity为1 = 1
我创建:
BaseClass myClass = New DerivedClass();
问题:
当我试着问
时myClass is DerivedClass
我得到“假”,因为myClass不是DerivedClass而是BaseClassProxy。
没有Lazy Loading,NHibernate不会创建代理对象,我也没有这个问题。
当我尝试将myClass转换为DerivedClass时,我得到了这个错误(显然),因为我尝试将BaseClassProxy对象转换为DerivedClass。
Unable to cast object of type 'Castle.Proxies.BaseClassProxy' to type 'DerivedClass'.
问题:
如何获取实际分配的对象类型以将其与DerivedClass进行比较?
是否可以转换BaseClassProxy对象以获取DerivedClass的实例?
感谢您的回复。
答案 0 :(得分:10)
不幸的是,由于BaseClassProxy
将从DerivedClass
继承,因此无法将NHibernate代理BaseClassProxy
强制转换为BaseClass
的实例,因此对DerivedClass
一无所知1}}。你需要做的是能够使用它们的类型是对它们的实际类型的对象是unproxy,即做类似的事情:
public T UnProxyObjectAs<T>(object obj)
{
return Session.GetSessionImplementation().PersistenceContext.Unproxy(obj) as T;
}
var derived = UnProxyObjectAs<DerivedClass>(myClass);
Session是您的NHibernate会话。