2

谁能告诉我是否可以向 NHibernate 延迟加载的集合添加条件。

例如,假设我有一个包含员工的部门......我通过 id 获取部门,然后我懒加载员工......但是假设有 1000 名员工,我只想要最后雇用的员工30天。

GetDeptById(1)
   |
   --延迟加载员工(其中 HireDate >= 7/1/2009)

似乎我可以使用映射文件中的过滤器来做到这一点......但是我可以在代码中的延迟加载中添加某种标准吗?

4

1 回答 1

2

实现这一点的最佳方法是使用过滤器。在映射(实体和包)中定义过滤器,然后在选择“部门”之前启用过滤器,参数为您想要的日期。

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

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

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

如果您唯一想做的就是应用限制,我更喜欢映射过滤器选项,因为这样您可以有选择地预先获取集合,从而在单个选择中使用对象图。

如果您想执行其他操作(例如分页),则 CreateFilter 会更好,尽管对于更复杂的场景,针对员工的查询会更好 imo。

于 2009-07-27T10:12:19.153 回答