2009-07-24 116 views
2

任何人都可以告訴我是否有可能向NHibernate延遲加載的集合添加條件。關於lazyload的NHibernate標準

例如,假設我有一個包含員工的部門...我通過ID獲得部門,然後我懶加載員工......但是可以說有1000名員工,我只希望那些員工在過去的30天內僱用。

GetDeptById(1)
      |
      --Lazy負荷的員工(其中僱傭日期> = 7/1/2009)

好像我可能做到這一點,在映射文件過濾器......但我可以補充的標準,某種對代碼中的延遲加載?

回答

2

實現此目的的最佳方法是使用過濾器。在映射中定義過濾器(包括實體和包),然後在選擇「部門」之前啓用具有參數所需日期的過濾器。

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

您也可以保持原樣並在延遲加載的集合上應用自定義過濾器。

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

如果你想要做的唯一事情是應用限制,我寧願映射過濾器的選擇,因爲這樣你可以有選擇地渴望抓取集合,有這樣的一個選擇對象圖。

如果您想要執行其他操作(如分頁),CreateFilter會更好,但對於更復雜的情況,針對Employees的查詢會更好。