Örnek olarak kullanılan Northwind Veritabanı Modelinde Product(Ürün) ve Category(Kategoriler) örnek tabloları seçilmekte ve ".edmx" uzantılı dosya açıldığında şekildeki diyagramlarla karşılaşılmaktadır. Aşağıdaki kod parçaları kullanılarak test işlemleri yürütülür. protected void Page_Load(object sender, EventArgs e) { NorthwindEntities nt = new NorthwindEntities(); foreach (var item in nt.Category) { Response.Write("Kategori İsmi : " + item.CategoryName + "</br>"); Response.Write("Ürün Sayısı : " + item.ProductList.Count + "</br></br>"); } } Bu koda ilişkin ekran çıktısı aşağıdaki gibi olmaktadır.
Çıktıya göre ürün sayılarının "0" olması hatalı gibi görünse de bu durum ile SQL tarafından fazla sorgunun çalışması ile meydana gelen Lazy Loading(Ağır yükleme)durumunun önüne geçilmektedir. SQL Profiler(SQL Veri İzleyicisi) performans durumlarını gösteren bir araç olduğu için bahsedilen performans kazancı bu araç ile gözlenebilmektedir. SQL Veri İzleyicisinde veri izleme işlemi aşağıda belirtilen biçimde yapılmaktadır.
Visual Studio'da derlenmiş, yukarıda kodları verilmiş olan program çalıştırıldığında izleyicilerde aşağıdaki durum gözlenmektedir. SQL Veri İzleyicisinde gözlendiği üzere ürün sayılarının bulunmasına dair bir sorguda bulunulmamış sadece kategoriler sorgulanmıştır. Sorgulama "CategoryID" için SQL:BatchStarting (Toplu Başlangış) komutu ile başlamış ve SQL:BatchCompleted(Toplu Bitiş) komutu ile sonlanmıştır. Sorgulama sadece kategori için yapıldığından ürün sayıları yukarıdaki ekran çıktısında olduğu gibi "0"dır. Henüz yüklenmemiştir. Varlık Altyapısında ağır yükleme işleminin amacı kullanıcının bilinçli bir şekilde yükleme işlemini yapabilmesini sağlamaktadır. Böylelikle yüklenme gerekmeyen kısımlarda performans artırılmış olunur. Gereksiz sorgunun önüne geçilir. Load(Yükle) metodunu çağırarak ağır yükleme işlemi gerçekleştirilebilmektedir. Aşağıda görülen kod parçası kategori tipine bağlı ürün içeriğinin de çağrılmasını sağlamaktadır. Bu işlem için kod kısmında aşağıdaki değişiklik yapılabilmektedir. NorthwindEntities nt = new NorthwindEntities(); foreach (var item in nt.Category) { if (!item.ProductList.IsLoaded) item.ProductList.Load(); Response.Write("Kategori İsmi : " + item.CategoryName + "</br>"); Response.Write("Ürün Sayısı : " + item.ProductList.Count + "</br></br>"); "RPC:Completed" kısmında "Ürünler" tablosundan "CategoryID"nin eşit olduğu kısımdaki tüm özellikleri çekilmektedir. "@EntityKeyValue1=1"in anlamı "CategoryID"si 1'e eşit olan "Ürünler" tablosunun tüm özelliklerini almayı sağlamaktadır. Bu işlem "@EntityKeyValue1=1" den @EntityKeyValue1=8'e kadar 8 kez yapılmaktadır. ilk olarak 5 ürün "SQL:BatchStarting" komutu ile sorguya çekilmiş daha sonra geriye kalan 3 kategori için de ürün sorgusu gönderilmiştir. Bir başka yöntem ise "Eager Loading" işlemidir. Include(İçerir) metodu kullanılarak "Eager Loading" işlemi gerçekleştirilebilmektedir. "Include" metodunun içine Navigation Property(Dolaşım Özelliği) ismi yazılır. NorthwindEntities nt = new NorthwindEntities(); foreach (var item in nt.CategorySet.Include("ProductList")) { Response.Write("Kategori İsmi : " + item.CategoryName + "</br>"); Response.Write("Ürün Sayısı : " + item.ProductList.Count + "</br></br>"); } Sql da görüldüğü gibi kategori tablosunun özellikleri ve alt sorgu ile de "Ürünler" tablosunun özellikleri çekilmektedir. Tek sorguyla işlem tamamlanmıştır. Bu kodlara bağlı ekran çıktısı aşağıdaki gibidir. Her ikisinde de sonuç aynıdır. Varlık Altyapısının Linq'e Göre Farkları : Yukarıda gösterilen uygulamanın aynısı linq ile yapılıp elde edilen sonuçlar karşılaştırılarak aralarındaki farklar görülebilmektedir. Northwind Veritabanı Modelinden Products(Ürünler) ve Category(Kategori) örnek tabloları alınmaktadır.