我有以下類:NHibernate的:獲取具體類型引用的抽象實體的
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();
}
}
所以,當我打開一個酒吧,其富物業只是一個代理。
如何獲得Foo的子類型(即FooTypeA)?
我已閱讀了很多NH文檔和論壇帖子。他們描述了獲取父類型的工作方式,而不是子類。
如果我嘗試unproxy類,我收到這樣的錯誤: 對象是爲FooBase
嗨,謝謝 - 我想你錯過了我的問題中的最後一句話。當我嘗試unproxy對象時,我收到異常:「對象是FooBase的未初始化代理」。這一切都發生在同一個NH會話內。 – cbp 2011-03-09 00:38:51
嗨,不,這是最後一句讓我相信你試圖在會議以外取消對象的方式。無論如何,如果你正在做會議中的所有事情,我的建議應該可以工作(我自己使用它)。 – Yhrn 2011-03-09 07:25:38
正如你上面所說的,我的建議和Jamie的基本上是一樣的,但我更喜歡只暴露底層對象的類型給你更多的機會繞過代理,從而阻止NHibernate正常工作。 – Yhrn 2011-03-09 07:30:48