是否可以在 nhibernate/fluent 中为每个具体映射获取一个表来发出数据库语句以确定类的类型,然后发出另一个语句来获取详细信息,而不是在一个巨大的左连接 uber 语句中加入所有子类表。
换句话说,子类详细信息可以“延迟”加载。
我有一个使用流利的 nhibernate 和 ClassMap/SubClassMap 映射类映射的类层次结构。每个派生类(无论如何大多数)都有自己的表。所以这是每个具体类的表。
我没有指定鉴别器值,因为它们在所有子类都包含在同一个表中时使用。然而,我在基类表中有一个整数值,指示它是哪种类型。nhibernate 是否能够使用此数据并为派生类数据发出延迟加载。鉴别器值是数据库中的整数,对应于基类中的枚举。
例子。
public sealed class PartyMap : ClassMap<Party>
{
public PartyMap()
{
Table("Party");
// I thought this might do it, but it doesn't :-(
Polymorphism.Explicit();
Id(x => x.Id).Column("PartyId");
Map(x => x.PartyType).CustomType<PartyType>().Column("PartyTypeId");
Map( ...
// if I specify this, nhibernate expects all the fields
// to be in the base class table, above Table(...) is the only one used.
// DiscriminateSubClassesOnColumn<int>("PartyTypeId", 0).AlwaysSelectWithValue();
}
}
public class PersonMap : SubclassMap<Person>
{
public PersonMap()
{
Table("Person");
KeyColumn("PartyId");
// if I specify this, nhibernate expects all the fields
// to be in the base class table, above Table(...) is ignored.
// DiscriminatorValue((int) PartyType.Person);
}
}