Учебники

Entity Framework — нетерпеливая загрузка

Стремительная загрузка — это процесс, при котором запрос для одного типа объекта также загружает связанные объекты как часть запроса. Стремительная загрузка достигается с помощью метода Include .

Это означает, что запрашиваемые связанные данные будут возвращены вместе с результатами запроса из базы данных. Существует только одно подключение к источнику данных, больший объем данных возвращается в начальном запросе.

Например, при запросе студентов, загружайте их зачисления. Студенты и их зачисления будут получены в одном запросе.

Давайте рассмотрим следующий пример, в котором все учащиеся с соответствующими зачислениями извлекаются из базы данных с помощью активной загрузки.

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

Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод.

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

Ниже приведены некоторые другие формы запросов на загрузку, которые можно использовать.

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

Несколько уровней

Также возможно загружать несколько уровней связанных объектов. Следующие запросы показывают примеры студентов, зачислений и курсов.

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

Мы рекомендуем вам выполнить вышеприведенный пример пошагово для лучшего понимания.