2016-09-28 1 views
0

Ich habe das verzögerte Laden für ein Entity Framework-Modell der Datenbank aktiviert. In diesem Beispiel verwende ich die Tabellen State und City, wobei die Tabelle City eine untergeordnete Tabelle für die Tabelle State ist (die über einen Fremdschlüssel verbunden ist). Wählen Sie mithilfe von Entity Framework nur übergeordnete Daten und keine untergeordneten Daten aus.

Bei Verwendung der folgenden Abfrage:

from State in DBEntity.State 
where State.StateId == 1 
select State 

ich den Staat Objekt, das eine Liste der Stadt Objekte enthält. Diese Liste wird bei Verwendung der obigen Abfrage ausgefüllt. Unter bestimmten Umständen brauche ich nur die Liste der Staaten und möchte die Städte nicht. In diesen Fällen würde das Abrufen der untergeordneten Daten (Städte) die Leistung erheblich beeinträchtigen. Unter anderen Umständen brauche ich alle untergeordneten Daten, selbst wenn die Leistung langsam ist.

Wie kann ich erreichen, die folgenden:

  • Holen Sie sich alle Staats- und Stadt Daten in einer Funktion
  • nur die Statusdaten holen und nicht die Stadt Daten (keine Child-Daten) in einer anderen Funktion
+0

Ich würde empfehlen, lazy loading modellweit zu deaktivieren, und eifrig laden ('Include()'), wenn nötig. Bei Bedarf können Sie das verzögerte Laden in einzelnen Kontextinstanzen aktivieren. –

Antwort

1

Machen Sie die City Eigenschaft auf State virtuell.

Per EntityFrameworkTutorial.net:

Navigation Eigenschaft sollte als öffentliche, virtuelle definiert werden. Context führt kein Lazy Loading durch, wenn die Eigenschaft nicht als virtuell definiert ist.

Dies wird die Liste der City Objekte nur geladen werden, wenn Sie eine include() Anweisung oder versuchen, verwenden sie für den Zugriff nach dem State geladen.

+0

Ist dies auch die richtige Antwort für den Datenbank-First-Ansatz? Normalerweise ändere ich keine automatisch generierten Klassen, da sie beim nächsten Update des Modells überschrieben werden könnten. Wenn ich die automatisch generierte State-Klasse ändere und die City-Eigenschaft virtuell mache, würde diese Änderung ein Modell-Update/Refresh überleben? –

Verwandte Themen