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.