我有一个“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)。