man*_*llt 4 c# nhibernate casting lazy-loading proxy-classes
我定义:
[ActiveRecord("BaseEntity", Lazy = true )]
class BaseClass {}
[ActiveRecord("DerivedEntity", Lazy = true )]
class DerivedClass : BaseClass {}
Run Code Online (Sandbox Code Playgroud)
在DB BaseEntity和DerivedEntity中,1 = 1
我创造:
BaseClass myClass = New DerivedClass();
Run Code Online (Sandbox Code Playgroud)
问题:
当我试着问
myClass is DerivedClass
Run Code Online (Sandbox Code Playgroud)
我得到"假",因为myClass不是DerivedClass而是BaseClassProxy.
没有延迟加载,NHibernate不会创建代理对象,我没有这个问题.
当我尝试将myClass转换为DerivedClass时,我得到了这个错误(显然),因为我尝试将BaseClassProxy对象强制转换为DerivedClass.
Unable to cast object of type 'Castle.Proxies.BaseClassProxy' to type 'DerivedClass'.
Run Code Online (Sandbox Code Playgroud)
问题:
如何获取实际分配的对象类型以将其与DerivedClass进行比较?
是否可以转换BaseClassProxy对象以获取DerivedClass的实例?
感谢您的答复.
Joh*_*mer 10
遗憾的是,不可能将NHibernate代理强制转换BaseClassProxy为一个实例,DerivedClass因为BaseClassProxy遗嘱将继承,BaseClass因此对你的知识一无所知DerivedClass.你需要做的是能够使用它们的类型是对它们的实际类型的对象是unproxy,即做类似的事情:
public T UnProxyObjectAs<T>(object obj)
{
return Session.GetSessionImplementation().PersistenceContext.Unproxy(obj) as T;
}
var derived = UnProxyObjectAs<DerivedClass>(myClass);
Run Code Online (Sandbox Code Playgroud)
Session是你的NHibernate会话.
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |