0

多対一の関係を持つ 2 つのテーブルがあり、データベースからすべてのデータを読み取るときにパフォーマンスの問題があります。

ClassA は ClassB の親です

構成 ClassA

<id name="Id">
  <generator class="native" />
</id>

<property name="FieldA1" column="FieldA1" />
<many-to-one name="ClassB" column="ClassBId" />

構成 ClassB

<id name="Id">
  <generator class="native" />
</id>

<property name="FieldB1" column="FieldB1"/>

ClassA オブジェクトに classB オブジェクトが一度に含まれる、classA オブジェクトのリストが必要です。

ClassA からすべてのデータを要求すると、非常にうまく機能しますが、ClassA のエントリごとに sql ステートメントが実行され (select * from ClassB where Id==ClassA.ID)、クラス B を取得するため、非常に遅くなります。lazy フラグの設定ClassB のデータが必要なので true にするのは解決策ではありません。

すべてのデータをより良いパフォーマンスで読み取ることができるように NHibernate を取得する方法を知っている人はいますか?

ありがとう !

4

2 に答える 2

1

SetFetchMode を FetchMode.Join にできるはずです。その後、1 つのクエリがデータベースに送信されます。http://davidhayden.com/blog/dave/archive/2008/12/06/ImprovingNHibernatePerformanceFetchingStrategiesFetchModeFluentNHibernate.aspxを参照して、正しい方向を示す例を確認してください。

于 2011-02-02T20:01:49.110 に答える
0

すべての ClassA に ClassB があるわけではない場合に備えて、クエリを作成するときに結合タイプを指定することもできます。

query.CreateAlias("ClassB", "B", JoinType.LeftOuterJoin);
于 2011-02-08T20:46:38.737 に答える