FluentNHibernate继承table-per-subclass,特定子类的map集合

时间:2013-12-19 15:24:17

标签: c# nhibernate fluent-nhibernate

我有一个“Day”域模型,它有一些相关的“PersonalPlans”。还有一些类继承自PersonalPlan(如OperatorPlan)。 我希望能够检索OperatorPlan s的集合。 如何正确映射?

(我正在跳过这个问题中不重要的主键和其他字段。)

域类:

public class Day {
    public virtual IList<PersonPlan> PeoplePlans { get; set; }
}
public class PersonPlan
{
    public virtual Day Day { get; set; }
}
public class OperatorPlan: PersonPlan {} 

映射:

public class OperatorPlanMap: SubclassMap<OperatorPlan> {
    public OperatorPlanMap() {
    // some stuff
    }
}

public class PersonPlanMap: ClassMap<PersonPlan> {
    public PersonPlanMap() {
        Id(x => x.Id);
        References(x => x.Day).Not.Nullable();
    }
}

public class DayMap: ClassMap<Day> {
    public DayMap() {
        // ...
        HasMany(x => x.PeoplePlans);
    }
}

现在每当我创建新的PersonPlan或其中一个子类型(例如OperatorPlan)时,都可以通过Day.PeoplePlans获取。

现在我希望能够映射特定类型的集合,如下所示:

public class Day {
    public virtual IList<PersonPlan> PeoplePlans { get; set; }
    public virtual IList<OperatorPlan> OperatorPlans { get; set; }
}

如何正确映射 OperatorPlans

简单地使用HasMany(x => x.OperatorPlans)会导致数据库表扩展为一个新列Day_Id。在这种情况下,似乎忽略了“层级”关系(通过PersonPlan)。

0 个答案:

没有答案