Entity Framework - Hevesli Yükleme

Hevesli yükleme, bir varlık türü için bir sorgunun, sorgunun bir parçası olarak ilgili varlıkları da yüklediği süreçtir. Hevesli yükleme,Include method.

Veritabanındaki sorgu sonuçlarıyla birlikte ilgili verilerin istenmesi anlamına gelir. Veri kaynağına yalnızca bir bağlantı yapılır, ilk sorguda daha büyük miktarda veri döndürülür.

Örneğin, öğrencileri sorgularken, kayıtlarını istekli olarak yükleyin. Öğrenciler ve kayıtları tek bir sorgu ile alınacaktır.

Kayıtları olan tüm öğrencilerin istekli yükleme kullanılarak veritabanından alındığı aşağıdaki örneğe bakalım.

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

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki çıktıyı alacaksınız.

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

Aşağıda, kullanılabilecek istekli yükleme sorgularının bazı biçimleri verilmiştir.

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

Çoklu Düzeyler

Aynı zamanda, ilgili varlıkların birden çok düzeyini hevesle yüklemek de mümkündür. Aşağıdaki sorgular Öğrenci, Kayıtlar ve Kurs örneklerini gösterir.

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

Daha iyi anlamak için yukarıdaki örneği adım adım uygulamanızı öneririz.