2016-08-05 5 views
2

Angenommen, ich habe Tabellen wie =Warum Entity Framework wird geladen verbundenen Unternehmen automatisch

  1. Benutzer (ID, Benutzername, E-Mail, Passwort)
  2. User_Profile (ID, UserID_FK, First, Last, Mitte)

ich habe einige Implementierungen gesehen, wo, wenn wir versuchen, Daten von Benutzern Tabelle zu holen, und wir müssen damit verbundene Dateneinheit verwenden wir auch dann

db.Users.Include(x=>x.User_Profile).Where(z=>z.ID==1).ToList()

Aber in meinem Projekt, auch wenn ich

db.Users.Where(z=>z.ID==1).ToList()

verwenden bin ich noch in der Lage verbundene Unternehmen zu erhalten. Warum passiert das?

+1

Lazy Loading aktiviert? –

+0

Wie kann ich das wissen? – kamalpreet

+3

können Sie es durch Konfiguration von Kontext wie "Context.Configuration.LazyLoadingEnabled" überprüfen. Sie können das Lazy Loading für alle Entitäten deaktivieren, indem Sie den Wert auf false setzen: 'Context.Configuration.LazyLoadingEnabled = false;' –

Antwort

2

Um Ihre Frage zu beantworten, müssen Sie die grundlegenden Ideen hinter Lazy Loading und Eager loading in EF verstehen.

Gespannt Laden:

Eager Beladung ist der Prozess, bei dem eine Abfrage für einen Typ von Entität auch verwandte Einheiten als Teil der Abfrage lädt. Eager-Laden wird durch Verwendung der Include-Methode erreicht. Beispiel: Ihre Abfrage unten lädt den Benutzer mit der ID 1 und seinem Profil.

db.Users.Include(x=>x.User_Profile).Where(z=>z.ID==1).ToList() 

Faul Laden:

Faul Beladung ist der Prozess, bei dem ein Unternehmen oder eine Sammlung von Objekten automatisch aus der Datenbank zum ersten Mal geladen wird, dass eine Eigenschaft auf die Entität bezieht/Einheiten zugegriffen wird. Bei der Verwendung von POCO-Entitätstypen wird Lazy Loading erreicht, indem Instanzen von abgeleiteten Proxy-Typen erstellt und dann virtuelle Eigenschaften überschrieben werden, um den Loading-Hook hinzuzufügen. Wenn Sie beispielsweise die in Ihrem Code definierte Benutzerklassenklasse verwenden, werden die zugehörigen Profile/s beim ersten Aufruf der Proflie/s-Navigationseigenschaft geladen.

verzögertes Laden für spezielle Navigationseigenschaften

  • Lazy Loading der Beiträge Sammlung ausschalten kann, indem die Beiträge Eigenschaft nicht-virtuellen ausgeschaltet.

verzögertes Laden für alle Einheiten ausschalten:

public class MyDbContext: DbContext 
{ 
    public MyDbContext:() 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
    } 
} 

Explicit Laden:

Explicit Laden ist wie folgt definiert: Wenn Objekte, die von einer Abfrage zurückgegeben werden, verwandte Objekte nicht gleichzeitig geladen. Standardmäßig werden sie nicht geladen, bis sie explizit mithilfe der Load-Methode für eine Navigationseigenschaft angefordert werden.

Ressourcen:

https://msdn.microsoft.com/en-us/data/jj574232.aspx

+0

Also bedeutet es in Lazy Loading, wenn wir nicht versuchen, auf die Navigationseigenschaft zuzugreifen, werden die Datensätze nicht abgerufen, richtig? – kamalpreet

+0

@kamalpreet auch dann korrekt, wenn der VS-Debugger sie lädt, wenn Sie darauf zugreifen. Der dynamische Proxy (virtueller Proxy) kann leere Objekte bereitstellen, bis die Abfrage abgeschlossen ist. Weitere Informationen: https://msdn.microsoft.com/en-us/data/jj592886.aspx –

Verwandte Themen