使用discriminator作为子类的子类

时间:2012-10-24 22:03:00

标签: c# fluent-nhibernate

问题似乎非常通用,但我是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类派生的所有属性,以及区分正常Employees和Bosses的鉴别器?

1 个答案:

答案 0 :(得分:0)

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

public class BossMap : EmployeeMap {}

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

相关问题