5

问题似乎很笼统,但我是 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 表,以及一个区分普通员工和老板的鉴别器?
4

1 回答 1

0

如果您只是将 BossMap 别名为 EmployeeMap:

public class BossMap : EmployeeMap {}

你应该得到你需要的映射。

于 2012-10-24T22:10:06.490 回答