Entity Framework - Explizites Laden
Wenn Sie das verzögerte Laden deaktiviert haben, ist es weiterhin möglich, verwandte Entitäten träge zu laden, dies muss jedoch mit einem expliziten Aufruf erfolgen.
Im Gegensatz zum verzögerten Laden gibt es keine Unklarheit oder Verwechslungsgefahr hinsichtlich der Ausführung einer Abfrage.
Dazu verwenden Sie die Load-Methode für den Eintrag der zugehörigen Entität.
Rufen Sie für eine Eins-zu-Viele-Beziehung die Load-Methode für Collection auf.
Rufen Sie für eine Eins-zu-Eins-Beziehung die Load-Methode in Reference auf.
Schauen wir uns das folgende Beispiel an, in dem das verzögerte Laden deaktiviert ist und dann der Schüler mit dem Vornamen Ali abgerufen wird.
Die Schülerinformationen werden dann auf die Konsole geschrieben. Wenn Sie sich den Code ansehen, werden auch Registrierungsinformationen geschrieben, aber die Entität "Registrierungen" ist noch nicht geladen, sodass jede Schleife nicht ausgeführt wird.
Nachdem diese Entität "Registrierungen" explizit geladen wurde, werden Schülerinformationen und Registrierungsinformationen in das Konsolenfenster geschrieben.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
context.Configuration.LazyLoadingEnabled = false;
var student = (from s in context.Students where s.FirstMidName ==
"Ali" select s).FirstOrDefault<Student>();
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID: {0}, Name: {1}", student.ID, name);
foreach (var enrollment in student.Enrollments) {
Console.WriteLine("Enrollment ID: {0}, Course ID: {1}",
enrollment.EnrollmentID, enrollment.CourseID);
}
Console.WriteLine();
Console.WriteLine("Explicitly loaded Enrollments");
Console.WriteLine();
context.Entry(student).Collection(s ⇒ s.Enrollments).Load();
Console.WriteLine("ID: {0}, Name: {1}", student.ID, name);
foreach (var enrollment in student.Enrollments) {
Console.WriteLine("Enrollment ID: {0}, Course ID: {1}",
enrollment.EnrollmentID, enrollment.CourseID);
}
Console.ReadKey();
}
}
}
Wenn das obige Beispiel ausgeführt wird, erhalten Sie die folgende Ausgabe. Zunächst werden nur Schülerinformationen angezeigt, und nach dem expliziten Laden der Anmeldeentität werden sowohl die Schüler- als auch die zugehörigen Anmeldeinformationen angezeigt.
ID: 1, Name: Ali Alexander
Explicitly loaded Enrollments
ID: 1, Name: Ali Alexander
Enrollment ID: 1, Course ID: 1050
Enrollment ID: 2, Course ID: 4022
Enrollment ID: 3, Course ID: 4041
Wir empfehlen, dass Sie das obige Beispiel zum besseren Verständnis Schritt für Schritt ausführen.