Ich habe eine Methode für meine generierte partielle Klasse wie folgt:
%Vor% Wenn ich mir meinen SQL Server anschaue, kann ich sehen, dass der generierte Code eine SELECT *.* FROM Children
macht. Dieser Code stammt direkt von meiner Klasse. Ich habe überprüft, dass die Reihenfolge meiner Skip / Take VOR meiner .ToList ist.
Wenn ich die .ToList entferne, ist diese Zeile schnell (und es wird keine SQL an meine Datenbank gesendet), aber in dem Moment, in dem ich foreach
über die Ergebnisse versuche, bekomme ich dieselbe SQL an meine DB: SELECT *.* FROM Children
.
Gibt es etwas Besonderes, wenn ich .Skip und .Take in den Navigationseigenschaften meiner Entitäten verwende?
update
Ich werde versuchen, das eigentliche SQL zu generieren, ich bin momentan nicht dafür eingerichtet. Ich habe das erste gefunden, weil es in der SSMS-Liste "Kürzlich teuerste Anfragen" auftaucht.
Ausführen:
%Vor%gibt ~ 4.000.000 Zeilen zurück und dauert ~ 25 Sekunden.
Ausführen:
%Vor%gibt ~ 4.000.000 Zeilen zurück und dauert ~ 25 Sekunden.
Wie ich schon sagte, werde ich das SQL, das für diese generiert wurde, packen und sie ebenfalls darstellen.
Das Problem besteht darin, dass Sie eine LINQ-zu-Objekt-Abfrage ausführen, wenn Sie eine untergeordnete Sammlung wie diese abfragen. EF lädt die gesamte Sammlung und führt die Abfrage im Speicher aus.
Wenn Sie EF 4 verwenden, können Sie wie folgt
abfragen %Vor%In EF 4.1
%Vor%Tags und Links .net c# entity-framework sql-server-2008-r2 navigation-properties