私の問題は、このビューを読み込むたびに、アプリケーションが同じクエリをデータベースに249回送信することです。もともと私は遅延読み込みを使用していましたが、クエリの数は2倍でした。エンティティフレームワーク6でのEager Loading時の複数のDBクエリ
上記の249の数値は、このクエリが返す行の数を表します。
私の理解は、この動作を排除すべき結合を作成することです。
このようなクエリの重複を排除する方法を教えてもらえますか?
乾杯!
以下のコードは擬似コードであり、コンパイルを目的としていません。
コントローラー:
var apples = _unitOfWork.Context.Apples
.Include(x=> x.AppleTypes)
.OrderByDescending(x => x.Id)
.Where(x => x.Status == (int)AppleStatusConstants.New
&& x.IsRejected != true && x.AppleManId != null);
return View(apples);
ビュー:垣間見るから
@model IEnumerable<Apple>
@Html.DisplayNameFor(model => model.AppleTypes.TypeSeason)
@foreach (var item in Model){
@Html.DisplayFor(modelItem => item.AppleTypes.TypeSeason)
}
SQLトレース:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Type] AS [Type],
[Extent2].[Id] AS [Id1],
[Extent2].[TypeSeason] AS [TypeSeason],
FROM [dbo].[Apples] AS [Extent1]
LEFT OUTER JOIN [dbo].[AppleTypes] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
WHERE (0 = [Extent1].[Status]) AND (NOT ((1 = [Extent1].[IsRejected]) AND ([Extent1].[IsRejected] IS NOT NULL))) AND ([Extent1].[OrgUnitId] IS NOT NULL)
ORDER BY [Extent1].[Id] DESC
.ToList(IS)より高価な操作ですか?上級プログラマーの一人が、可能な限りいつでも.ToList()を使用しないように私に奨励します。 –
良い答えはありません。それは単に依存しています。 '時々ある。ToList() 'は正しい解決策であり、そうでないときは時間です。 –