Entity Framework - Chargement impatient

Le chargement hâtif est le processus par lequel une requête pour un type d'entité charge également des entités associées dans le cadre de la requête. Le chargement hâtif est obtenu par l'utilisation duInclude method.

Cela signifie que la demande de données associées doit être renvoyée avec les résultats de la requête de la base de données. Il n'y a qu'une seule connexion établie à la source de données, une plus grande quantité de données est renvoyée dans la requête initiale.

Par exemple, lorsque vous interrogez des étudiants, chargez avec impatience leurs inscriptions. Les étudiants et leurs inscriptions seront récupérés en une seule requête.

Jetons un coup d'œil à l'exemple suivant dans lequel tous les étudiants avec leurs inscriptions respectives sont extraits de la base de données en utilisant le chargement hâtif.

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();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, vous recevrez la sortie suivante.

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

Voici quelques-unes des autres formes de requêtes de chargement hâtif qui peuvent être utilisées.

// 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();

Niveaux multiples

Il est également possible de charger rapidement plusieurs niveaux d'entités associées. Les requêtes suivantes montrent des exemples d'étudiants, d'inscriptions et de cours.

// 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();

Nous vous recommandons d'exécuter l'exemple ci-dessus étape par étape pour une meilleure compréhension.