私は2つの同様の質問を見つけました:
このページによると:
同時に複数のコレクション プロパティを積極的にフェッチしないように注意してください。このステートメントは正常に機能しますが、次のようになります。
var employees = session.Query<Employee>() .Fetch(e => e.Subordinates) .Fetch(e => e.Orders).ToList();
データベースに対してデカルト積クエリを実行するため、返される行の合計数は、下位の合計に注文の合計を掛けたものになります。
次のモデルがあるとしましょう:
public class Person
{
public virtual int Id { get; private set; }
public virtual ICollection<Book> Books { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
QueryOver/Linq を使用して (デカルト積を返すことなく)、書籍、記事、住所をすべての人に熱心にロードする最も簡単な方法は何ですか?
ありがとう
アップデート:
以下のcremorの回答と、このスレッドのFlorian Limの回答を参照してください。次のコードはうまく機能します。データベースへのラウンドトリップは 1 回だけです。
var persons = session.QueryOver<Person>()
.Future<Person>();
var persons2 = session.QueryOver<Person>()
.Fetch(x => x.Books).Eager
.Future<Person>();
var persons3 = session.QueryOver<Person>()
.Fetch(x => x.Articles).Eager
.Future<Person>();
var persons4 = session.QueryOver<Person>()
.Fetch(x => x.Addresses).Eager
.Future<Person>();