1

有一个相当简单的(或者我会这么想!)问题开始让我恼火。

我有一组简单的类。

基类“Product”被其他类继承,Product 有一个字符串鉴别器列“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 表中,而是在“MotorHome”表中。

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

任何帮助将不胜感激。

4

1 回答 1

1

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

流利的子类映射文档

于 2011-11-14T07:14:32.003 回答