Entity Framework - Caricamento desideroso

Il caricamento desideroso è il processo in base al quale una query per un tipo di entità carica anche le entità correlate come parte della query. Il caricamento desideroso si ottiene utilizzando l'estensioneInclude method.

Significa che la richiesta di dati correlati vengono restituiti insieme ai risultati della query dal database. Esiste una sola connessione stabilita all'origine dati, una maggiore quantità di dati viene restituita nella query iniziale.

Ad esempio, quando si interrogano gli studenti, caricare con entusiasmo le loro iscrizioni. Gli studenti e le loro iscrizioni verranno recuperati in un'unica query.

Diamo uno sguardo al seguente esempio in cui tutti gli studenti con le rispettive iscrizioni vengono recuperati dal database utilizzando il caricamento eager.

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

Quando il codice precedente viene compilato ed eseguito, riceverai il seguente output.

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

Di seguito sono riportate alcune delle altre forme di query di caricamento desideroso che possono essere utilizzate.

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

Livelli multipli

È anche possibile caricare con impazienza più livelli di entità correlate. Le seguenti query mostrano esempi di Studente, Iscrizioni e Corso.

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

Si consiglia di eseguire l'esempio precedente in modo graduale per una migliore comprensione.