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