EF 4.1 code-first: Wie kann man Navigationseigenschaften mit den Methoden Include und / oder Select bestellen?

7

Dies ist der zweite Schritt einer Frage erklärt hier (EF 4.1 Code-First: Wie kann man verwandte Daten (Eltern-Kind-Enkel) laden?) . Durch die @Slauma Anleitung konnte ich Daten abrufen. Mein erster Code war folgender:

%Vor%

Es funktioniert, aber das wird viele Abfragen an die Datenbank senden, und ich suchte einen Weg, dies alles in nur einer Abfrage zu tun. Durch @Slauma 's Anleitung (erklärt auf dem obigen Link) Ich ändere die Abfrage zu dieser:

%Vor%

Nun, wie kann ich Kinder (und Enkel) bei der Auswahl bestellen (wie zum Beispiel den ersten Code oben)?

    
javad amiry 22.09.2011, 23:44
quelle

2 Antworten

22

Leider unterstützt das Laden von Eagern ( Include ) das Filtern oder Sortieren geladener untergeordneter Sammlungen nicht. Es gibt drei Möglichkeiten, um zu erreichen, was Sie wollen:

  • Mehrere Roundtrips zur Datenbank mit explizitem sortierten Laden. Das ist der erste Codeausschnitt in Ihrer Frage. Beachten Sie, dass mehrere Roundtrips nicht unbedingt schlecht sind und dass Include und nested Include kann zu einer enormen Multiplikation übertragener Daten zwischen Datenbank und Client führen .

  • Verwenden Sie das Eager-Laden mit Include oder Include(....Select(....)) und sortieren Sie die Daten nach dem Laden in den Speicher:

    %Vor%
  • Verwenden Sie eine Projektion:

    %Vor%

Dies ist nur ein einzelner Roundtrip und funktioniert, wenn Sie die Änderungsverfolgung nicht deaktivieren (verwenden Sie .AsNoTracking() in dieser Abfrage nicht). Alle Objekte in dieser Projektion müssen in den Kontext geladen werden (der Grund, warum das erste ToList() erforderlich ist) und der Kontext bindet die Navigationseigenschaften korrekt zusammen (dies ist ein Feature namens "Beziehungsspanne" ) ).

    
Slauma 23.09.2011, 11:28
quelle
0

Haben Sie versucht, zu folgen?

... Wählen Sie (aus ch in c.children        orderby ch.property desending        Wählen Sie ch) ...

    
Changgyu Oh 23.09.2011 07:04
quelle