Entity Framework: carga ansiosa

La carga ansiosa es el proceso mediante el cual una consulta para un tipo de entidad también carga entidades relacionadas como parte de la consulta. La carga ansiosa se logra mediante el uso deInclude method.

Significa que la solicitud de datos relacionados se devuelve junto con los resultados de la consulta de la base de datos. Solo se realiza una conexión a la fuente de datos, se devuelve una mayor cantidad de datos en la consulta inicial.

Por ejemplo, al consultar a los estudiantes, cargue con entusiasmo sus inscripciones. Los alumnos y sus matrículas se recuperarán en una única consulta.

Echemos un vistazo al siguiente ejemplo en el que todos los estudiantes con sus respectivas inscripciones se recuperan de la base de datos utilizando la carga ansiosa.

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

Cuando se compile y ejecute el código anterior, recibirá el siguiente resultado.

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

A continuación se muestran algunas de las otras formas de consultas de carga ansiosa que se pueden utilizar.

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

Niveles múltiples

También es posible cargar con entusiasmo múltiples niveles de entidades relacionadas. Las siguientes consultas muestran ejemplos de estudiantes, inscripciones y cursos.

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

Le recomendamos que ejecute el ejemplo anterior paso a paso para una mejor comprensión.