2

レガシーデータベースを使用したプロジェクトで Fluent NHibernate LINQ を使用しています。私たちのシナリオは、顧客情報と住所を含むテーブルがあるというものです。C# で Customer と Address を個別のエンティティとして作成しました。住所は再び郵便番号オブジェクトを参照します。

マッピング中に、Address を Customer の Component としてマッピングしました。ここで、N+1 の選択を回避するために Customer をフェッチしながら、Zip Code (Address によって参照される) を熱心にロードしたいと考えています。

書き込もうとするFetch(customer => customer.Address.ZipCode)と、複雑すぎると表示されます。Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode)Address は Customer と同じテーブルに格納されているため、できません。

この問題を解決する方法はありますか?

4

1 に答える 1

2

残念ながら、Linq プロバイダーはこの状況を処理できないようです。したがって、基準またはQueryOver APIを使用します

session.CreateCriteria<Customer>()
    .SetFetchMode("Address.ZipCode", FetchMode.Eager)
    .List();

session.QueryOver<Customer>()
    .Fetch(u => u.Address.ZipCode).Eager
    .List();

または、マッピングで ZipCode の LazyLoading を無効にします

于 2011-12-14T14:54:47.957 に答える