我有以下课程:
public abstract class FooBase
{
public virtual Guid Id { get; set; }
}
public class FooTypeA : FooBase
{
public virtual string TypeAStuff { get; set; }
}
public class Bar
{
public virtual Guid Id { get; set; }
public virtual FooBase Foo { get; }
}
FooBase 和 FooTypeA 使用每类表层次结构模式进行映射。
Bar 的映射如下:
public class BarDbMap : ClassMap<Bar>
{
public BarDbMap()
{
Id(x => x.Id);
References(x => x.Foo)
.LazyLoad();
}
}
因此,当我加载 Bar 时,它的 Foo 属性只是一个代理。
如何获取 Foo 的子类类型(即 FooTypeA)?
我读过很多 NH 文档和论坛帖子。他们描述了获取父类型而不是子类的方法。
如果我尝试unproxy https://stackoverflow.com/questions/2664245/identifying-nhibernate-proxy-classes在课堂上,我收到如下错误:对象是 FooBase 的未初始化代理
我想出了如何避免收到的异常。下面是取消 FooBase 代理的方法:
public static T Unproxy<T>(this T obj, ISession session)
{
if (!NHibernateUtil.IsInitialized(obj))
{
NHibernateUtil.Initialize(obj);
}
if (obj is INHibernateProxy)
{
return (T) session.GetSessionImplementation().PersistenceContext.Unproxy(obj);
}
return obj;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)