/ / nHibernate - 親と子コレクションのリスト - c#、nhibernate、nhibernate-mapping

nHibernate - 親と子コレクションのリスト - c#、nhibernate、nhibernate-mapping

私はこのスキーマを持っています:

ここに画像の説明を入力

私はすでにManyToManyの間のマッピングを行っています Post そして Tag。私が達成しようとしているのは、投稿のリストと各投稿のタグの子コレクションです。このように表示することができます:

ここに画像の説明を入力

私がこれまでにしたことはこれです:

IList<Post> results = base._session.CreateCriteria(typeof(Post))
.SetFetchMode("User", FetchMode.Eager)
.SetFetchMode("Votes", FetchMode.Eager)
.AddOrder(Order.Desc("_dateCreated"))
.ToList();

しかし、すべての Post それは1つの余分なSQLをフェッチする Votes。 一度にそれを取得する方法はありますか?

回答:

回答№1は1

この場合の解決策はバッチフェッチである必要があります。ここに: 19.1.5。バッチフェッチを使用する 詳細を見つけることができます。

あなたはあなたのコレクションやエンティティに属性を付ける必要があります batch-szie="25".

xml:

<bag name="Tags" ... batch-size="25">
...

流暢:

HasManyToMany(x => x.Tags)
...
.BatchSize(25)

これは、1つだけでなく、ほとんどのSQL Selectステートメントを実行しますが、得られる柔軟性は重要です。

ここではバッチフェッチが正しい方法である理由を説明しようとしました。 NHibernate QueryOverでFetchを実行すると複数のSQLクエリとDBヒットが発生する

最後に、簡単なクエリを使用できます (明示的なフェッチではない)、なぜなら、 batch-size 必要なすべての遅延ロードを取得するために発行されるSQL文の量を削減します...