Gewusst wie: Laden von verknüpften Objekten mithilfe von Lazy Loading (Entity Framework)
Dieses Thema zeigt, wie Lazy Loading zum Laden verknüpfter Objekte verwendet wird. Wenn Lazy Loading aktiviert wurde, werden verknüpfte Objekte geladen, wenn über eine Navigationseigenschaft auf sie zugegriffen wird. Sie können Objekte nach wie vor mit der Include-Methode oder explizit mit der LoadProperty-Methode laden. Weitere Informationen finden Sie unter Laden von verknüpften Objekten (Entity Framework).
In der Entity Framework -Laufzeit lautet der Wert der LazyLoadingEnabled-Eigenschaft in einer Instanz von ObjectContext standardmäßig false. Wenn Sie die Entity Framework -Tools verwenden, um ein neues Modell und die zugehörigen generierten Klassen zu erstellen, wird im generierten Code LazyLoadingEnabled im Konstruktor des generierten Objektkontexts auf true festgelegt.
Das Beispiel in diesem Thema beruht auf dem Adventure Works Sales-Modell. Zum Ausführen des Codes in diesem Thema muss dem Projekt bereits das Adventure Works Sales-Modell hinzugefügt und das Projekt zur Verwendung von Entity Framework konfiguriert worden sein. Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) bzw. Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework).
Beispiel
Im folgenden Beispiel werden zehn Kontakte angezeigt, und der Benutzer kann einen Kontakt auswählen. Auf der Grundlage des ausgewählten Kontakts werden dann die damit verknüpften Bestellungen geladen.
Class LazyLoading
Public Sub EnableLazyLoading()
Using context As New AdventureWorksEntities()
' You do not have to set context.ContextOptions.LazyLoadingEnabled to true
' if you used the Entity Framework to generate the object layer.
' The generated object context type sets lazy loading to true
' in the constructor.
context.ContextOptions.LazyLoadingEnabled = True
' Display ten contacts and select a contact
Dim contacts = context.Contacts.Take(10)
For Each c In contacts
Console.WriteLine(c.ContactID)
Next
Console.WriteLine("Select a customer:")
Dim contactID As Int32 = Convert.ToInt32(Console.ReadLine())
' Get a specified customer by contact ID.
Dim contact = context.Contacts.Where(Function(c) c.ContactID = contactID).FirstOrDefault()
' If lazy loading was not enabled no SalesOrderHeaders would be loaded for the contact.
For Each order As SalesOrderHeader In contact.SalesOrderHeaders
Console.WriteLine("SalesOrderID: {0} Order Date: {1} ", order.SalesOrderID, order.OrderDate)
Next
End Using
End Sub
End Class
class LazyLoading
{
public void EnableLazyLoading()
{
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// You do not have to set context.ContextOptions.LazyLoadingEnabled to true
// if you used the Entity Framework to generate the object layer.
// The generated object context type sets lazy loading to true
// in the constructor.
context.ContextOptions.LazyLoadingEnabled = true;
// Display ten contacts and select a contact
var contacts = context.Contacts.Take(10);
foreach (var c in contacts)
Console.WriteLine(c.ContactID);
Console.WriteLine("Select a customer:");
Int32 contactID = Convert.ToInt32(Console.ReadLine());
// Get a specified customer by contact ID.
var contact = context.Contacts.Where(c => c.ContactID == contactID).FirstOrDefault();
// If lazy loading was not enabled no SalesOrderHeaders would be loaded for the contact.
foreach (SalesOrderHeader order in contact.SalesOrderHeaders)
{
Console.WriteLine("SalesOrderID: {0} Order Date: {1} ",
order.SalesOrderID, order.OrderDate);
}
}
}
}
Siehe auch
Aufgaben
Gewusst wie: Bestimmen von Ergebnissen mit Abfragepfaden (Entity Framework)
Gewusst wie : Explizites Laden verbundener Objekte (Entity Framework)
Konzepte
Laden von verknüpften Objekten (Entity Framework)
Laden von verknüpften POCO-Objekten (Entity Framework)