关于lazyload的NHibernate标准

时间:2009-07-24 18:58:25

标签: nhibernate filter lazy-loading nhibernate-collections

有人能告诉我是否可以为NHibernate延迟加载的集合添加标准。

例如,假设我有一个包含员工的部门......我按照ID获取部门,然后懒得加载员工...但是,假设有1000名员工,我只希望雇用的员工在过去的30天里。

GetDeptById(1)
|
--Lazy load employees(HireDate> = 7/1/2009)

似乎我可以使用映射文件中的过滤器来执行此操作...但是我可以在代码中为延迟加​​载添加某种标准吗?

1 个答案:

答案 0 :(得分:2)

实现这一目标的最佳方法是使用过滤器。在映射中定义过滤器(包括实体和包),然后在选择“部门”之前启用带参数的过滤器所需的日期。

session.EnableFilter("HireDateFilter").SetParameter("dateParameter", DateTime.Now.AddDays(-30));

您也可以按原样保留映射,并在延迟加载的集合上应用自定义过滤器。

session.CreateFilter(department.Employees, "HireDate >= :dateParameter").SetParameter("dateParameter", DateTime.Now.AddDays(-30));

如果您要做的唯一事情是应用限制,我更喜欢映射过滤器选项,因为这样您可以选择性地急切获取集合,这样就可以在单个选择中使用对象图。

如果您想进行其他操作(如分页),CreateFilter会更好,但对于更复杂的情况,针对Employees的查询会更好用。