2

このようにPhotosコレクションの最初の要素のみが必要なときにPhotosコレクションを持つPropertyという名前のオブジェクトを送信する場合、このアプローチはコレクションからすべての要素をロードし、assocよりもロードしますか?私が望むように最初にだけ、またはこのアプローチが私が必要とするものであり、コレクションから最初にロードします。

public PropertyHPViewModel(Property x)
{
    Id = x.Id;
    Created = x.Created;
    Title = x.Title;
    Photo = x.Photos.First();
}

プロファイラーから生成されたSQL

SELECT photos0_.PropertyId    as PropertyId1_,
       photos0_.Id            as Id1_,
       photos0_.Id            as Id1_0_,
       photos0_.ImageData     as ImageData1_0_,
       photos0_.ImageMimeType as ImageMim3_1_0_,
       photos0_.PropertyId    as PropertyId1_0_
FROM   Photo photos0_
WHERE  photos0_.PropertyId = 129 /* @p0 */

この生成されたクエリ が20個あるので、すべて最後の行でのみ異なります。

WHERE photos0_.PropertyId = xxx /* @p0 */

番号が写真IDオブジェクトである場合、nhibernateプロファイラーに従ってこのクエリにSELECT N +1ALERTがあることを追加する必要があります。

4

2 に答える 2

1

x.PhotosがIQueryableでない場合、.First()呼び出しはORMによって送信されるSQLクエリに参加できません。これが事実だと思います。

唯一の解決策は、ISessionから手動でクエリを作成することです。

于 2012-05-29T21:30:19.277 に答える
0

式ツリーが折りたたまれている場合、NHibernateは単一のエンティティのみを取得するSQLを生成する必要があります。

于 2012-05-29T21:22:17.077 に答える