2
我正在嘗試做以下操作,但它抱怨說「引用的類擴展了'未找到」。我想我需要有針對每個具體類型組件的映射,但我不能指定Attributes.Class兩次..使用NHibernate映射泛型類
的代碼如下:
[NHibernate.Mapping.Attributes.Class(Table = "Components", Abstract = true,
NameType = typeof (Component<ContentItem>))]
public abstract class Component<T> : IComponent<T> where T : ContentItem
{
...
}
[NHibernate.Mapping.Attributes.JoinedSubclass(Table = "ComponentA", ExtendsType = typeof(Component<ItemA>))]
public class ComponentA : Component<ItemA>
{
...
}
[NHibernate.Mapping.Attributes.JoinedSubclass(Table = "ComponentB", ExtendsType = typeof(Component<ItemB>))]
public class ComponentB : Component<ItemB>
{
...
}
哪裏意達和ItemB繼承ContentItem和所有映射。
如果我按照這篇文章並在Component'1.hbm.xml文件中硬編碼信息,那麼它似乎工作正常。我只是不知道如何使用Mapping.Attributes註釋來做到這一點。令人討厭的是,T實際上並沒有映射到類中,因爲在這種情況下它不會被數據庫持久化。 – LucyB 2009-11-26 10:51:00
因此,它聽起來像組件的持久性屬性實際上並不依賴於T.如果是這種情況,將它們分隔成一個ComponentBase(它被映射),從ComponentBase派生(它沒有映射),然後得到Component Component 類映射爲ComponentBase的聯接子類。 –
2009-11-26 17:15:09
是的,這就是我最終做的。謝謝你的幫助。 – LucyB 2009-11-27 13:03:19