Lazy ve Eager Loading
Merhaba,
Bu makalede lazy ve eager loading olaylarını anlatmaya çalışacağım
Lazy Loading bir sorguda çektiğimiz verilerin bağlı oldu verileri getirmesine denir.Bu durum yerine göre kullanılır.Mesela hangi toptancıdan nekadar ürün alıyoruz, bunu öğrenmemiz lazım.
Bu örnekte Northwind veritabanını kullanacağım.
Bunun için aşağıdaki kodu yazarız.
-
foreach (var item in nt.Suppliers)
-
{
-
Console.WriteLine("Şirket Adı : {0} {1}", item.CompanyName, item.Products.Count);
-
}
Fakat sonuç aşağıdaki gibi olur.

Peki neden böyle bir sonuçla karşılaştık ? Bunun cevabı çok açık Entity Framework geliştirilirken bu tip durumlar düşünülüp Lazy Loading false olarak gelmiştir.
Yani Suppliers tablosuna bağlı olan Products tablosu yuklenmemiştir.Dolayısıyla Products tablosu Count edilemedi.
Lazy Loading i aktif hale getirmek için aşağıdaki kod işimizi görmektedir.
-
foreach (var item in nt.Suppliers)
-
{
-
if (!item.Products.IsLoaded)
-
item.Products.Load();
-
Console.WriteLine("Şirket Adı : {0} {1}", item.CompanyName, item.Products.Count);
-
}
Buradaki IsLoaded property si Products tablosunun yüklenip yüklenmediğini söylemektedir.Load metodu ise Products tablosunun yüklenmesini sağlamaktadır.
Bu koddan sonra istenileni yapmış olduk.

Fakat bu sonuçta ise performans kaybı yaşanmaktadır.SQL Server Proifiler ı açıp buna birlikte şahit olabiliriz.Yukarıdaki kodu çalıştırdığımız zaman sql sorgu yağmuruna tutulmaktadır.

Burada analiz çok önemlidir. Biz sadece 2 kolonu kullanıyoruz ama bütün tabloyu çekiyoruz.Bu işlem oldukça külfetli oluyor.Bu yüzden Eager Loading metodunu kullanacağız.
Bunun için aşağıdaki kodu yazmak yeterli olacaktır.
Buradaki Include metodu sayesinde Products tablosununa içerisine almasını sağladık ve daha fazla performans kazanmak için sorgu yazıp sadece kullnacağımız alanları çektik.
Bu koddan sonra SQL Server Proifiler ı tekrar kontrol edelim.

Gerçekten fark edilebilir bir sonuç çıktı karşımıza ![]()
Bu makalemde sizlere Lazy ve Eager Loading i anlatmaya çalıştım. Başka bir makalede görüşmek üzere…

Entity FrameWork’te Son Yorumlar