2

nHiberante Linqクエリを実行し、関連するオブジェクトを熱心にロードしたい場合。どこに置くFetchFetchMany

このような:

_session.Query<Entity>()
    .Where(x => x.IsSomething)
    .FetchMany(x => x.Children);

またはこのように:

_session.Query<Entity>()
    .FetchMany(x => x.Children)
    .Where(x => x.IsSomething);

FetchまたはFetchMany(パフォーマンスのため)を配置するための最良の順序を知りたいです。それとも順序は重要ですか?エンティティフレームワークを使用する場合、常にインクルードを最初に記述しますが、これはnHibernateの場合と同じですか?

nHibernateで仕様パターンを使用します。Fetchでは、またはFetchManyを仕様に入れるのは賢明ですか?

4

1 に答える 1

3

関係ない。IQueryableは単なるクエリステートメントであり、Fetch()、FetchMany()はNhibernateクエリの設定であり、後で遅延読み込みを実行しないようにクエリを拡大してより多くのデータを返します。ToList()、Single()などを呼び出すまで、クエリはデータベースに送信されません。次に、linqクエリは、より多くの結合と列を含むSQLクエリに変換され、データベースサーバーに送信されます。

次のクエリは、エンティティと子をフェッチするときに「同様の」結合を実行しますが、ここではそれを匿名オブジェクトにマップします。

_session
    .Query<Entity>()
    .Where(x => x.IsSomething)
    .Select(x => new { MyEntity = x, MyEntitiesChildren = x.Children });
于 2012-08-17T11:25:00.263 に答える