February 9, 2008
@ 11:59 PM

Linq To SQL de, bir nesne ( Personel ) yüklendiğinde ( from c in DB.Personels select c ) ilişkili olduğu ( Telefon ) tablodaki veriler ( Personele ait Telefonlar )
belleğe yüklenmezler. Aşağıdaki resime bakacak olursak ;




kisi nesnesine ait Ad özelliğinin değeri okunmak istendiğinde zaten bellekte olduğu için yeniden bir işlem yapılmamakta. Ama bu kisi nesnesine ait telefonlar - tablolar arasında ilişki olduğunu biliyoruz - Telefons isimli bir koleksiyon türünden özellik  ile ifade ediliyor. Bu kişiye ait telefon bilgilerinden ilkine erişmek istediğimizde kisi nesnesine ait telefon bilgilerini alıp nesneyle ilişkilendirmek için ikinci bir T-SQL sorgusu veritabanı sunucusuna gönderiliyor. Aslında performans açısından bakıldığında istenen durum budur.

Peki ama ben kisi nesnesini oluşturduğumda buna ait telefon bilgileri de - dikkat edin o kişiye ait adres bilgileri de olabilir ama biz sadece telefon bilgilerinin de - tamamen belleğe yüklensin ikinci bir select işlemi yapılmasın istersek. Bu durumda kodumuza  aşağıdaki gibi eklemeler yapmamız  gerekecektir.



Görüldüğü gibi DataLoadOptions sınıfı ile  nesnenin ilişkili olduğu verilerin de nesne ile birlikte belleğe yüklenmesini sağlayabiliyoruz.  LoadWith Generic metoduna tip olarak Kisi sınıfını verip, lambda Expression ile de Kisi türünden bir nesne yüklendiğinde buna ait telefon bilgilerinin de yüklenmesini ( c => c.Telefons ) belirtebiliyoruz (Immediately Load). DataContext nesnemizin de LoadOptions özelliğine değeri atayarak şekilde görüldüğü gibi iki ayrı select sorgusu ile istediğimiz senaryoyu gerçeklemiş olduk.

 
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview