Mein Problem ist, dass jedes Mal, wenn ich diese Ansicht laden meine Anwendung 249 identische Abfragen an die Datenbank sendet. Ursprünglich verwendete ich Lazy Loading und die Anzahl der Abfragen war doppelt.Mehrere DB-Abfragen beim Eager Laden in Entity Framework 6
Die obige 249 Zahl gibt die Anzahl der Zeilen an, die diese Abfrage zurückgibt.
Mein Verständnis ist, dass .Include erstellt eine Verknüpfung, die dieses Verhalten beseitigen sollte?
Kann mir jemand sagen, wie man diese Doppelarbeit von Abfragen beseitigt?
Prost!
Der folgende Code ist Pseudocode und soll nicht kompiliert werden.
Controller:
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);
Ausblick:
@model IEnumerable<Apple>
@Html.DisplayNameFor(model => model.AppleTypes.TypeSeason)
@foreach (var item in Model){
@Html.DisplayFor(modelItem => item.AppleTypes.TypeSeason)
}
SQL Trace von Glimpse:
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
Ist .ToList() ein teure Operation? Einer der Senior-Programmierer hier ermuntert mich dazu, .ToList() wann immer möglich zu verwenden –
Es gibt keine gute Antwort. Es hängt einfach davon ab. Es gibt Zeiten, als.ToList() 'ist die richtige Lösung und Zeiten, wenn es nicht ist. –