私のクエリでは、すべてのエンティティ (20 個) を選択し、このようにコレクションを反復しようとしています
List<Domain.Property> data = session.Query<Domain.Property>().ToList();
PropertyViewModel viewModel;
List<PropertyViewModel> listOfViewModels = new List<PropertyViewModel>();
foreach (Domain.Property prop in data)
{
viewModel = new PropertyViewModel()
{
AdType = prop.AdType.ToString(),
CityName = prop.CityName,
ContructionYear = prop.ConstructionYear,
Photo = prop.Photos.First()
};
}
listOfViewModels.Add(viewModel);
各プロパティには 1 枚以上の写真が必要です。必要なのは最初の 1 枚だけなので、Photos.First() を使用しています。
この行がコメントアウトされている場合 Photo = prop.Photos.First() nhib. プロファイラーは、20 個のエンティティが読み込まれたことを報告しますが、これは問題ありません (最初のクエリからのもの)。
しかし、 Photo = prop.Photos.First() を使用すると、ロードされたエンティティは 65 エンティティに増加し、その数は約 65 になるはずです。プロパティ + 写真コレクションに相当します。
誰でも正しい方向を指すことができますか?
そしてニブで。生成された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 = 117 /* @p0 */
これは SELECT N+1 としてマークされています