Table-Per-SubClass无效

时间:2011-11-14 02:33:03

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

有一个相当简单(或者我会想到的)问题,这个问题开始让我感到恶心。

我有一套简单的课程。

基类“Product”由其他类继承,Product有一个字符串Discriminator列“ProductType”,其中应该允许NH返回正确的子类。

以下是我正在处理的简单版本。

 public class ProductMap : ClassMap<Product>
{
    public ProductMap()
    {

        Table("Product");
        Id(x => x.Id)
            .GeneratedBy.Identity();

        DiscriminateSubClassesOnColumn("ProductType");


        Map(x => x.Name)
            .Length(200);
        Map(x => x.BriefDescription)
            .Length(400);

        Map(x => x.FullDescription);

        Map(x => x.Sku);
        Map(x => x.VendorSku);

        References(x => x.Vendor, "VendorId");


    }
}

public class MotorHomeMap : SubclassMap<MotorHome>
{
    public MotorHomeMap()
    {
        DiscriminatorValue("MotorHome");

        Table("MotorHome");


        //KeyColumn("ProductId");
        Map(x => x.Berths);


    }
}

但是,如果我执行一个简单的Session.QueryOver.List(),那么执行的查询将是

SELECT this_.Id               as Id1_0_,
   this_.Name             as Name1_0_,
   this_.BriefDescription as BriefDes4_1_0_,
   this_.FullDescription  as FullDesc5_1_0_,
   this_.Sku              as Sku1_0_,
   this_.VendorSku        as VendorSku1_0_,
   this_.VendorId         as VendorId1_0_,
   this_.Berths           as Berths1_0_,
   this_.ProductType      as ProductT2_1_0_

FROM Product this _

显然,“Berths”不在Product表中,而是在“MotorHome”表中。

我确定我错过了一些相当简单的东西,但是在我的生活中无法弄清楚我在这里做错了什么。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

通过指定DiscriminateSubClassesOnColumn,您将映射配置为每个类的层次结构而不是每个子类的表

Fluent mapping documentation on subclasses