NHibernate继承映射

时间:2009-10-15 22:22:41

标签: nhibernate inheritance nhibernate-mapping

我知道在NHibernate中你可以有继承映射,我知道你可以拥有每个类的表,每个子类的表和每个具体的表类,但它们并不适合我的情况。

基本上我想要的是能够拥有一个名为product的基类,如下所示:

public class BaseProduct 
{
     public virtual int ProductId {get;set;}
     public virtual string ProductName {get;set;}
}

直接映射到产品表。

然后我希望有一个继承自BaseProduct的Product类,如下所示:

public class Product : BaseProduct
{
    public virtual IList<Category> Categories {get;set;}
}

问题是Product类仍应映射到product表,唯一的区别是此实现有附加的Categories列表。

我没有涉及为什么我需要这样做的技术原因,我想知道它是否可能?

3 个答案:

答案 0 :(得分:3)

根据你的问题和评论,我得到你想要的«Single Table Inheritance» [PoEAA,Fowler],但是没有足够的能力在桌子上添加所需的鉴别器。

我自己从未遇到过这种情况,但是尝试在映射中添加一个鉴别器,这是一个计算值/派生字段,它使用sql来查找是否有来自Category的外键(不适用于Products虽然有空的类别集合。

如果您的方案是只读方案,并且您可以向数据库添加视图,则可以选择使用如上所述计算的鉴别器映射到“产品”视图。

答案 1 :(得分:0)

您正在寻找设置鉴别器值所需的表perclass NHDoc for inheritance

答案 2 :(得分:0)

您是否有其他从BaseProduct继承的类?如果没有,您只能映射Product类。