有一个相当简单(或者我会想到的)问题,这个问题开始让我感到恶心。
我有一套简单的课程。
基类“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”表中。
我确定我错过了一些相当简单的东西,但是在我的生活中无法弄清楚我在这里做错了什么。
非常感谢任何帮助。
答案 0 :(得分:1)
通过指定DiscriminateSubClassesOnColumn
,您将映射配置为每个类的层次结构而不是每个子类的表