问题似乎很笼统,但我是 fluentnhibernate 的新手,我的所有搜索都没有找到任何有用的东西。
我有一个类似于这个的类层次结构:
public class Person
{
public virtual int Id { get; protected set; }
public virtual string GivenName { get; set; }
public virtual string FamilyName { get; set; }
}
public class Employee : Person
{
public virtual string WhoAmI { get { return "I am just an Employee"; } protected set { } }
}
public class Boss : Employee
{
public override string WhoAmI { get { return "I am the boss."; } protected set { } }
}
即一个基类和两个子类(一个派生自另一个)。子类具有相同的签名,但基类没有。
下面的映射会将有关三个类的实例的所有信息放入同一个表中:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.Id);
Map(x => x.GivenName);
Map(x => x.FamilyName);
DiscriminateSubClassesOnColumn("type");
}
}
public class EmployeeMap : SubclassMap<Employee>
{
public EmployeeMap()
{
Map(x => x.WhoAmI);
}
}
public class BossMap : SubclassMap<Boss>
{
public BossMap()
{
}
}
省略 DiscriminateSubClassesOnColumn 将生成三个表:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.Id);
Map(x => x.GivenName);
Map(x => x.FamilyName);
}
}
public class EmployeeMap : SubclassMap<Employee>
{
public EmployeeMap()
{
Map(x => x.WhoAmI);
}
}
public class BossMap : SubclassMap<Boss>
{
public BossMap()
{
}
}
我的问题:是否有可能(在fluentnhibernate中)将这些类映射到两个表中,即有
- 一个包含从 Person 类派生的所有属性的 Person 表,以及
- 一个包含所有从 Employee 类派生的属性的 Employee 表,以及一个区分普通员工和老板的鉴别器?