gpt4 book ai didi

nhibernate - NHibernate:获取所引用抽象实体的具体类型

转载 作者:行者123 更新时间:2023-12-03 12:22:15 25 4
gpt4 key购买 nike

我有以下类(class):

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是使用“按类分类表”模式映射的。
条形图的映射如下:
public class BarDbMap : ClassMap<Bar>
{
public BarDbMap()
{
Id(x => x.Id);
References(x => x.Foo)
.LazyLoad();
}
}

因此,当我加载Bar时,其Foo属性只是一个代理。

如何获取Foo的子类类型(即FooTypeA)?

我已经阅读了很多NH文档和论坛帖子。它们描述了获取父类型而不是子类的工作方式。

如果我尝试 unproxy该类​​,则会收到类似以下的错误:
对象是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;
}

关于nhibernate - NHibernate:获取所引用抽象实体的具体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5229510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com