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
Lazy Loading aktiviert? –
Wie kann ich das wissen? – kamalpreet
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;' –