請考慮下面簡單的例子:映射接口或抽象類成分
public class Foo
{
public virtual int Id { get; protected set; }
public virtual IBar Bar { get; set; }
}
public interface IBar
{
string Text { get; set; }
}
public class Bar : IBar
{
public virtual string Text { get; set; }
}
而流利,NHibernate的地圖類:
public class FooMap : ClassMap<Foo>
{
public FooMap()
{
Id(x => x.Id);
Component(x => x.Bar, m =>
{
m.Map(x => x.Text);
});
}
}
在運行與配置的任何查詢,我得到以下例外:
NHibernate.InstantiationException: 「不能實例化抽象類或接口:NHMappingTest.IBar」
看來,NHibernate的嘗試實例化對象IBar
代替Bar
具體類。如何讓Fluent-NHibernate知道在屬性返回接口或抽象基類時要實例化哪個具體類?
編輯:通過書寫明確指定組件的類型Component<Bar>
(如Sly所建議的)沒有效果並導致發生相同的異常。
EDIT2:感謝vedklyv和保羅·巴圖姆:這種映射應該很快現在可能。
(+1)感謝您向FNH開發團隊提交了補丁。 – 2009-11-09 14:03:57