Entity Framework - Eifriges Laden
Eifriges Laden ist der Prozess, bei dem eine Abfrage für einen Entitätstyp auch verwandte Entitäten als Teil der Abfrage lädt. Eifriges Laden wird durch die Verwendung von erreichtInclude method.
Dies bedeutet, dass das Anfordern verwandter Daten zusammen mit den Abfrageergebnissen aus der Datenbank zurückgegeben wird. Es wird nur eine Verbindung zur Datenquelle hergestellt. Bei der ersten Abfrage wird eine größere Datenmenge zurückgegeben.
Wenn Sie beispielsweise Schüler befragen, laden Sie ihre Einschreibungen eifrig. Die Schüler und ihre Einschreibungen werden in einer einzigen Abfrage abgerufen.
Schauen wir uns das folgende Beispiel an, in dem alle Schüler mit ihren jeweiligen Einschreibungen durch eifriges Laden aus der Datenbank abgerufen werden.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
// Load all students and related enrollments
var students = context.Students
.Include(s ⇒ s.Enrollments).ToList();
foreach (var student in students) {
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.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, erhalten Sie die folgende Ausgabe.
ID: 1, Name: Ali Alexander
Enrollment ID: 1, Course ID: 1050
Enrollment ID: 2, Course ID: 4022
Enrollment ID: 3, Course ID: 4041
ID: 2, Name: Meredith Alonso
Enrollment ID: 4, Course ID: 1045
Enrollment ID: 5, Course ID: 3141
Enrollment ID: 6, Course ID: 2021
ID: 3, Name: Arturo Anand
Enrollment ID: 7, Course ID: 1050
ID: 4, Name: Gytis Barzdukas
Enrollment ID: 8, Course ID: 1050
Enrollment ID: 9, Course ID: 4022
Im Folgenden finden Sie einige der anderen Formen von eifrigen Ladeanfragen, die verwendet werden können.
// Load one Student and its related enrollments
var student1 = context.Students
.Where(s ⇒ s.FirstMidName == "Ali")
.Include(s ⇒ s.Enrollments).FirstOrDefault();
// Load all Students and related enrollments
// using a string to specify the relationship
var studentList = context.Students
.Include("Enrollments").ToList();
// Load one Student and its related enrollments
// using a string to specify the relationship
var student = context.Students
.Where(s ⇒ s.FirstMidName == "Salman")
.Include("Enrollments").FirstOrDefault();
Mehrere Ebenen
Es ist auch möglich, mehrere Ebenen verwandter Entitäten eifrig zu laden. Die folgenden Abfragen zeigen Beispiele für Studenten, Einschreibungen und Kurse.
// Load all Students, all related enrollments, and all related courses
var studentList = context.Students
.Include(s ⇒ s.Enrollments.Select(c ⇒ c.Course)).ToList();
// Load all Students, all related enrollments, and all related courses
// using a string to specify the relationships
var students = context.Students
.Include("Enrollments.Course").ToList();
Wir empfehlen, dass Sie das obige Beispiel zum besseren Verständnis Schritt für Schritt ausführen.