我正在尝试使用union-subclass策略和FluentNHibernate映射以下域模型。以下是我的类的外观(删除了不需要的部分)
public class Benefit
{
}
public class Leave : Benefit
{
}
public class SeasonTicketLoan : Benefit
{
}
这是我的映射代码
public class BenefitMappings : ClassMap<Benefit>
{
public BenefitMappings()
{
UseUnionSubclassForInheritanceMapping();
}
}
public class LeaveMappings : SubclassMap<Leave>
{
}
public class SeasonTicketLoanMappings : SubclassMap<SeasonTicketLoan>
{
}
当我使用SchemaExport
为上述映射生成数据库脚本时,我得到Leave
的表格和SeasonTicketLoan
的另一个表格,但Benefit
没有。我在这里错过了什么吗?
答案 0 :(得分:2)
......我在这里遗漏了什么吗?
是的,您正在使用映射每个具体类别表(TPC),这是用于创建
要获得真正深刻而清晰的理解,您应该阅读这篇全面的文章:
你可以在哪里阅读:
每个混凝土类别表(TPC)
在TPC继承中,继承层次结构中的每个类都有自己的表。继承层次结构掩盖了这样一个事实:有几个独立的基础表代表每个子类型。
代码段摘录:
// mapping of the TPCBaseEntity base class
public class TPCBaseEntityMap : ClassMap<TPCBaseEntity>
{
public TPCBaseEntityMap()
{
// indicates that this class is the base
// one for the TPC inheritance strategy and that
// the values of its properties should
// be united with the values of derived classes
UseUnionSubclassForInheritanceMapping();
如果我们希望每个基类都有表格,我们需要:
TPT是数据库中描述的具有单独表的继承。每个表都提供了其他详细信息,这些详细信息描述了基于另一个表的新类型,该表是该表的父级。
再次提供一些映射片段摘录:
// mapping of the TPTAnimal base class
public class TPTAnimalMap : ClassMap<TPTAnimal>
{
public TPTAnimalMap()
{
// the name of the schema that stores the table corresponding to the type
Schema("dbo");
// the name of the table corresponding to the type
Table("TPT_Animal");
...
// mapping of the TPTHorse class
public class TPTHorseMap : SubclassMap<TPTHorse>
{
public TPTHorseMap()
{
// the name of the schema that stores the table corresponding to the type
Schema("dbo");
// the name of the table corresponding to the type
Table("TPT_Horse");