我定义:
[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。
没有延迟加载,NHibernate 不会创建代理对象,我没有这个问题。
当我尝试将 myClass 转换为 DerivedClass 时,我收到此错误(显然),因为我尝试将 BaseClassProxy 对象转换为 DerivedClass。
Unable to cast object of type 'Castle.Proxies.BaseClassProxy' to type 'DerivedClass'.
问题:
感谢您的答复。
最佳答案
不幸的是,不可能将 NHibernate 代理 BaseClassProxy
转换为 DerivedClass
的实例,因为 BaseClassProxy
将从 BaseClass
继承,因此对您的 DerivedClass
一无所知。为了能够使用它们的类型,您需要做的是将对象取消代理为它们的实际类型,即执行以下操作:
public T UnProxyObjectAs<T>(object obj)
{
return Session.GetSessionImplementation().PersistenceContext.Unproxy(obj) as T;
}
var derived = UnProxyObjectAs<DerivedClass>(myClass);
其中 Session 是您的 NHibernate session 。
关于c# - 使用延迟加载的 NHibernate ObjectProxy 类型转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7977952/