有人能告诉我是否可以为NHibernate延迟加载的集合添加标准。
例如,假设我有一个包含员工的部门......我按照ID获取部门,然后懒得加载员工...但是,假设有1000名员工,我只希望雇用的员工在过去的30天里。
GetDeptById(1)
|
--Lazy load employees(HireDate> = 7/1/2009)
似乎我可以使用映射文件中的过滤器来执行此操作...但是我可以在代码中为延迟加载添加某种标准吗?
答案 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的查询会更好用。