谁能告诉我是否可以向 NHibernate 延迟加载的集合添加条件。
例如,假设我有一个包含员工的部门......我通过 id 获取部门,然后我懒加载员工......但是假设有 1000 名员工,我只想要最后雇用的员工30天。
GetDeptById(1)
|
--延迟加载员工(其中 HireDate >= 7/1/2009)
似乎我可以使用映射文件中的过滤器来做到这一点......但是我可以在代码中的延迟加载中添加某种标准吗?
谁能告诉我是否可以向 NHibernate 延迟加载的集合添加条件。
例如,假设我有一个包含员工的部门......我通过 id 获取部门,然后我懒加载员工......但是假设有 1000 名员工,我只想要最后雇用的员工30天。
GetDeptById(1)
|
--延迟加载员工(其中 HireDate >= 7/1/2009)
似乎我可以使用映射文件中的过滤器来做到这一点......但是我可以在代码中的延迟加载中添加某种标准吗?
实现这一点的最佳方法是使用过滤器。在映射(实体和包)中定义过滤器,然后在选择“部门”之前启用过滤器,参数为您想要的日期。
session.EnableFilter("HireDateFilter").SetParameter("dateParameter", DateTime.Now.AddDays(-30));
您也可以保留映射原样并在延迟加载的集合上应用自定义过滤器。
session.CreateFilter(department.Employees, "HireDate >= :dateParameter").SetParameter("dateParameter", DateTime.Now.AddDays(-30));
如果您唯一想做的就是应用限制,我更喜欢映射过滤器选项,因为这样您可以有选择地预先获取集合,从而在单个选择中使用对象图。
如果您想执行其他操作(例如分页),则 CreateFilter 会更好,尽管对于更复杂的场景,针对员工的查询会更好 imo。