2

NHibernateの遅延ロードされたコレクションに基準を追加できるかどうか誰かに教えてもらえますか?

たとえば、従業員を含む部門があるとします... IDで部門を取得してから、従業員を遅延ロードします...ただし、数千人の従業員がいて、最後に採用された従業員のみが必要だとします。 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));

制限を適用することだけが必要な場合は、mapping-filter オプションを使用することをお勧めします。これは、コレクションを選択的に熱心にフェッチし、この方法でオブジェクト グラフを 1 回の選択で取得できるためです。

追加の操作 (ページングなど) を実行する場合は、CreateFilter の方が適していますが、より複雑なシナリオでは、Employees を対象とするクエリの方が適しています。

于 2009-07-27T10:12:19.153 に答える