3

他のテーブルへの外部キーである多くのフィールドを持つ Person テーブルがあります

だから私はこれを行うために選択をしなければなりません:

   References(x => x.Field1).Fetch.Join();
   References(x => x.Field2).Nullable().Fetch.Join();
   References(x => x.Field3).Nullable().Fetch.Join();
   References(x => x.Field4).Nullable().Fetch.Join();

また

   References(x => x.Field1).Fetch.Select();
   References(x => x.Field2).Nullable().Fetch.Select();
   References(x => x.Field3).Nullable().Fetch.Select();
   References(x => x.Field4).Nullable().Fetch.Select();

最初のものは他のすべてのテーブルに対して外部結合を実行し、2 番目のものは実行しないことがわかります。nhibernate プロファイラーでテストを実行していますが、いつ Fetch.Select() を使用する必要があるかについて経験則またはベスト プラクティスを取得しようとしています (Web 上で多くを見つけることができません)。

すべてのエントリに対して Field2 テーブルの別のフィールドにアクセスしたい場合は、事前に結合を行う方がよいと思います。

この決定において、私が見逃している他の要因はありますか?

4

1 に答える 1

5

より多くのコンテキストがあり、各ユースケースには他の要件があるため、ユースケースまでその決定を遅らせます。そう:

  • ユースケースごとに異なるすべての参照にデフォルトの Fetchmode を使用します
  • Join()ポリモーフィック参照や常に必要な参照などの特殊なケースで使用する
  • Fetch(x => x.Fieldx).Eager特定のユースケースの明示的な熱心なロードへのクエリでの使用
于 2013-07-26T14:31:51.347 に答える