nHibernate-一个只包含超类型的集合

时间:2010-12-27 18:37:12

标签: nhibernate fluent-nhibernate


我有以下课程:

class Employee
{
    public string Name { get; set; }
}

class HistoricalEmployee : Employee
{
    public DateTime TerminationDate { get; set; }
}

class Company
{
    public IList<Person> CurrentEmployees { get; set; }
}


使用table-per-class-heirarchy策略映射Employee和HistoricalEmployee。
当我检索CurrentEmployees集合时,我希望它只包含Employee,而不是HistoricalEmployees的元素。
当员工'去世'时,他们并没有真正删除,但他们成为了HistoricalEmployee(还有一些属性,例如终止日期等)。
显然,随着时间的推移,HistoricalEmployees的数量将超过员工的数量,因此当我只需要当前的员工时,我无法获取所有的HistoricalEmployees。

我如何(流利地)配置集合以仅检索超类的元素?
我认为这与多态性属性有关,但我无法弄清楚如何做到这一点。


感谢,
的Jhonny

1 个答案:

答案 0 :(得分:1)

好的,我是这样做的:

mapping.HasMany(x => x.CurrentEmployees)
            //.Where(pqa => pqa.TimeOut != null)
            .Where("TerminationDate is null")

显然,.Where()函数在属性上创建了一个过滤器,这正是我所需要的 注意我使用了字符串版本,并注释掉了Func&lt;&gt;版本。
这是因为目前(FNH 1.1),据我所知,Func&lt;&gt;版本不起作用。
希望这有助于某人,
Ĵ