Khung thực thể - Tải rõ ràng

Khi bạn tắt tính năng tải chậm, vẫn có thể tải các thực thể liên quan một cách lười biếng, nhưng nó phải được thực hiện bằng một lệnh gọi rõ ràng.

  • Không giống như tải chậm, không có sự mơ hồ hoặc khả năng nhầm lẫn về thời điểm chạy truy vấn.

  • Để làm như vậy, bạn sử dụng phương thức Load trên mục nhập của thực thể liên quan.

  • Đối với mối quan hệ một-nhiều, hãy gọi phương thức Tải trên Bộ sưu tập.

  • Và đối với mối quan hệ một-một, hãy gọi phương thức Tải trên Tham chiếu.

Hãy xem ví dụ sau, trong đó tính năng tải chậm bị vô hiệu hóa và sau đó sinh viên có tên là Ali được truy xuất.

Thông tin sinh viên sau đó được ghi trên bảng điều khiển. Nếu bạn nhìn vào mã, thông tin tuyển sinh cũng được ghi nhưng thực thể Enrollments chưa được tải nên vòng lặp foreach sẽ không được thực thi.

Sau khi thực thể Đăng ký đó được tải một cách rõ ràng, bây giờ thông tin sinh viên và thông tin tuyển sinh sẽ được ghi trên cửa sổ bảng điều khiển.

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         context.Configuration.LazyLoadingEnabled = false;

         var student = (from s in context.Students where s.FirstMidName == 
            "Ali" select s).FirstOrDefault<Student>();

         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.WriteLine();
         Console.WriteLine("Explicitly loaded Enrollments");
         Console.WriteLine();

         context.Entry(student).Collection(s ⇒ s.Enrollments).Load();
         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();
      }
   }
}

Khi ví dụ trên được thực thi, bạn sẽ nhận được kết quả sau. Chỉ thông tin sinh viên đầu tiên được hiển thị và sau khi tải thực thể tuyển sinh một cách rõ ràng, cả sinh viên và thông tin tuyển sinh liên quan của anh ta đều được hiển thị.

ID: 1, Name: Ali Alexander
Explicitly loaded Enrollments
ID: 1, Name: Ali Alexander
       Enrollment ID: 1, Course ID: 1050
       Enrollment ID: 2, Course ID: 4022
       Enrollment ID: 3, Course ID: 4041

Chúng tôi khuyên bạn nên thực hiện ví dụ trên theo cách từng bước để hiểu rõ hơn.