Entity Framework - กำลังโหลด
การโหลดอย่างกระตือรือร้นเป็นกระบวนการที่เคียวรีสำหรับเอนทิตีประเภทหนึ่งจะโหลดเอนทิตีที่เกี่ยวข้องเป็นส่วนหนึ่งของคิวรีด้วย การโหลดที่กระตือรือร้นทำได้โดยการใช้ไฟล์Include method.
หมายความว่าการร้องขอข้อมูลที่เกี่ยวข้องจะถูกส่งคืนพร้อมกับผลลัพธ์การสืบค้นจากฐานข้อมูล มีการเชื่อมต่อเพียงครั้งเดียวกับแหล่งข้อมูลข้อมูลจำนวนมากจะถูกส่งกลับในแบบสอบถามเริ่มต้น
ตัวอย่างเช่นเมื่อสอบถามนักเรียนให้โหลดการลงทะเบียนของตนอย่างกระตือรือร้น นักเรียนและการลงทะเบียนของพวกเขาจะถูกเรียกค้นในแบบสอบถามเดียว
มาดูตัวอย่างต่อไปนี้ซึ่งนักเรียนทุกคนที่มีการลงทะเบียนตามลำดับจะถูกดึงข้อมูลจากฐานข้อมูลโดยใช้การโหลดอย่างกระตือรือร้น
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();
เราขอแนะนำให้คุณดำเนินการตามตัวอย่างข้างต้นในลักษณะทีละขั้นตอนเพื่อความเข้าใจที่ดีขึ้น