Entity Framework - กำลังโหลดอย่างชัดเจน

เมื่อคุณปิดใช้งานการโหลดแบบขี้เกียจคุณยังคงสามารถโหลดเอนทิตีที่เกี่ยวข้องได้อย่างเฉื่อยชา แต่ต้องดำเนินการด้วยการเรียกที่ชัดเจน

  • ซึ่งแตกต่างจากการโหลดแบบขี้เกียจไม่มีความคลุมเครือหรือความสับสนเกี่ยวกับเวลาที่เรียกใช้แบบสอบถาม

  • ในการดำเนินการดังกล่าวให้คุณใช้วิธีการโหลดในรายการของเอนทิตีที่เกี่ยวข้อง

  • สำหรับความสัมพันธ์แบบหนึ่งต่อกลุ่มเรียกใช้วิธีการโหลดบนคอลเล็กชัน

  • และสำหรับความสัมพันธ์แบบหนึ่งต่อหนึ่งให้เรียกใช้เมธอด Load ใน Reference

ลองมาดูตัวอย่างต่อไปนี้ซึ่งปิดใช้งานการโหลดแบบขี้เกียจแล้วนักเรียนที่มีชื่ออาลีจะถูกดึงออกมา

จากนั้นข้อมูลนักเรียนจะถูกเขียนบนคอนโซล หากคุณดูรหัสข้อมูลการลงทะเบียนจะถูกเขียนด้วย แต่เอนทิตีการลงทะเบียนยังไม่ได้โหลดดังนั้น foreach loop จะไม่ถูกดำเนินการ

หลังจากนั้นเอนทิตีการลงทะเบียนจะถูกโหลดอย่างชัดเจนในขณะนี้ข้อมูลของนักเรียนและข้อมูลการลงทะเบียนจะถูกเขียนบนหน้าต่างคอนโซล

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

เมื่อดำเนินการตามตัวอย่างข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ ข้อมูลนักเรียนอันดับแรกเท่านั้นที่จะปรากฏขึ้นและหลังจากโหลดเอนทิตีการลงทะเบียนอย่างชัดเจนทั้งข้อมูลนักเรียนและการลงทะเบียนที่เกี่ยวข้องจะปรากฏขึ้น

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

เราขอแนะนำให้คุณดำเนินการตามตัวอย่างข้างต้นในลักษณะทีละขั้นตอนเพื่อความเข้าใจที่ดีขึ้น