2

ATableAATableの2 つのテーブルがあり、どちらもプライマリ キーを共有しています - ATable.aKeyAATable.aKeyは、1 対 1 の関係を表します。Fluent マッピングでは、Fluent ATableMapping 内で定義された HasOne Relationship があり、すべて正常に機能します。ただし、 ATable のクエリを実行すると、子テーブル AATable の2番目のクエリ (N+1) が生成されることに気付きました。私の理解では、Hasone はデフォルトで熱心にロードされ、これは ATable のクエリの一部であると想定していましたが、これは間違っているのでしょうか?

.Not.LazyLoad().Fetch.Join()、PropertyRef、ForeignKeyの使用を含むさまざまなソリューションを調査しましたが、n + 1を解決できないように見えるため、1つのクエリでEagerロードされるか、Lazyロードされて、私のクエリで子を取得します。

誰かがこれに問題を抱えていたり、n + 1 なしで動作することを知っている例を持っていますか? アドバイスに感謝します。

4

1 に答える 1

-2

次の 2 つのオプションがあります。

  1. Not.LazyLoad()これにより、遅延ロードされた関連エンティティを提供する可能性が無効になり、NHB がsubselect元のクエリ内で対応するものを提供するようになります。
  2. component mapping両方のエンティティが同じテーブルを指すように使用します。両方のエンティティを一緒に取得することを決定すると、生成されたクエリは 1 つのテーブルのみにヒットするため、これはより良いアプローチです。最初のオプションのように 2 つではありません。これはパフォーマンスにとって間違いなく優れています。
于 2013-09-04T06:12:05.457 に答える