Entity Framework - Açık Yükleme

Geç yüklemeyi devre dışı bıraktığınızda, ilgili varlıkları tembel olarak yüklemek yine de mümkündür, ancak bunun açık bir çağrı ile yapılması gerekir.

  • Tembel yüklemeden farklı olarak, bir sorgunun ne zaman çalıştırıldığına ilişkin herhangi bir belirsizlik veya karışıklık olasılığı yoktur.

  • Bunu yapmak için ilgili varlığın girişinde Load yöntemini kullanırsınız.

  • Bire çok ilişkisi için, Koleksiyonda Load yöntemini çağırın.

  • Ve bire bir ilişki için, Referans üzerinde Load yöntemini çağırın.

Geç yüklemenin devre dışı bırakıldığı ve ardından adı Ali olan öğrencinin alındığı aşağıdaki örneğe bir göz atalım.

Öğrenci bilgileri daha sonra konsola yazılır. Koda bakarsanız, kayıt bilgileri de yazılır ancak Enrollments varlığı henüz yüklenmediğinden foreach döngüsü çalıştırılmayacaktır.

Bu Kayıtlar varlığı açıkça yüklendikten sonra şimdi öğrenci bilgileri ve kayıt bilgileri konsol penceresine yazılacaktır.

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

Yukarıdaki örnek yürütüldüğünde, aşağıdaki çıktıyı alacaksınız. İlk olarak yalnızca öğrenci bilgileri görüntülenir ve kayıt varlıkları açıkça yüklendikten sonra, hem öğrenci hem de ilgili kayıt bilgileri görüntülenir.

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

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