1

私は3つのテーブルA、B、およびCを持っています.AはBとCに複数の子レコードを持つ親テーブルです.

FNH がデカルト積を行っているかのように、AI にクエリを実行すると、レコードが多すぎます。

私のクエリは次の形式です。

var list = session.Query<A>()
  .Fetch(a=> a.Bs)
  .Fetch(a=> a.Cs)

ここで、Bs は A の IList プロパティ、Cs は A の IList プロパティです。

A に関連する数だけ B を取得し、A に関連する数だけ C を取得する必要があります。代わりに、それぞれの BxC 要素を取得します。

これらをロードするより良い方法はありますか?私は過去にこの正確な問題を回避したと確信していますが、私の古いサンプル コードでは見られません。

4

2 に答える 2

2

これが NH のバグなのかマッピングの問題なのかはわかりませんが、クエリは次のように最適化できます。

session.Query<A>()
    .Fetch(a=> a.Bs)
    .ToFuture();

var results = session.Query<A>()
    .Fetch(a=> a.Cs)
    .ToFuture()
    .ToList();
于 2012-10-24T11:21:39.690 に答える
2

Transformer を使用して、明確な結果を得ることができます。

var list = session.Query<A>()
  .Fetch(a=> a.Bs)
  .Fetch(a=> a.Cs)
  .SetResultTransformer( Transformers.DistinctRootEntity )

これは NH3.2 構文です。2.1 の場合、代わりに SetResultTransformer のパラメーターとして new DistinctRootEntityTransformer() (と思います) を使用する必要があります。

于 2012-10-24T09:11:14.380 に答える