.Net Core Eğitimleri

12- ) Entity Framework – Lazy Loading

Lazy Loading

Bundan önceki derslerde Entity Framework kullanarak nasıl custom şekilde Include işlemleri yapacağımızı gördük. Include işlemini birbiri ile ilişkili tabloların verilerini aynı model içinde göstermek için kullanıyoruz, bir nevi sql üzerinde join işlemi yapmak gibi de düşünebilirsiniz. Farketti iseniz getall, find ve getallwithpaging gibi kayıt çekmek için kullandığımız metodlar var ve biz ilişkili tablolarda bu metodları kullanmak için ilgili controllerda override ederek gerekli bağımlılıkları yani diğer tabloları modele include ettik. Peki her seferinde bu şekilde uğraşacakmıyız? Cevap stratejinize ve kurgunuza göre değişsede her seferinde uzun uzun bu işlemleri yapmak zorunda değilsiniz Lazy loading özelliği bizim için bu işi otomatik olarak yapabilir.

Eğer sisteminizde bulunan ilişkisel tabloların yapısı 3 ya da 4 kat aşağıya inmiyorsa yani örnek vermek gerekirse, Customer içinde organization bilgisi onun içinde ilçe bilgisi onun içinde il bilgisi, ilin içinde ülke bilgisi, … vs gibi alt alta giden bir çok kırılımınız yok ise ve ya gerekli donanımsal kaynaklarınız var ise lazy loading yapısını kullanabilirsiniz. Lazy loading sizin entityleriniz içinde bulunan virtual şeklinde tanımlanmış diğer entity referanslarınızı override ederek içlerini otomatik olarak doldurur. Yani sizin Customer tablonuz içinde virtual olarak tanımlanmış bir organization entity referansı/property si var ise lazy loading onu otomatik olarak ilişkili kayıt ile dolduracaktır.

Artıları

  • Her seferinde include işlemi yapmanıza gerek kalmaz
  • Gerekli tüm bağımlılıkları otomatik olarak aldığı için istemcinin veriye erişmesi kolaylaşır

Eksileri

  • Karmaşık ilişkilere sahip mimarilerde uzun bekleme sürelerine yol açabilir
  • İhtiyacınız olmadığı senaryolarda bile tüm ilişkisel alanlar dolar

Bunlara daha fazla madde eklenebilir ancak en belirgin ve yalın hali ile bu şekilde ifade edilir. Bu özelliği kullanıp kullanmamak tamamı ile sizin senaryolarınıza ve stratejilerinize kalmışdır.

Peki Nasıl Kullanacağız?

Öncelikle “Microsoft.EntityFrameworkCore.Proxies” nuget paketini Data katmanımıza ekleyeceğiz. Bunun için Data projesine solution explorer üzerinden sağ tıklayarak manage nuget packages seçeneğine tıklayalım. Daha sonra arama kımına  “Microsoft.EntityFrameworkCore.Proxies” yazalım ve çıkan paketi seçerek Install tuşuna basalım. Daha önceki derslerde nuget paketlerinin nasıl sisteme eklendiğini detaylıca görmüştük, sorun yaşar iseniz önceki derslere bakabilirsiniz. Paketi projeye ekledikten sonra SolutionExplorer üzerinden Context klasörü altında bulunan ApplicationDbContext.cs dosyamıza çift tıklayalım ve içeriğini aşağıdaki şekilde düzenleyelim.

Artık projemize Lazy loading özelliğini eklemiş olduk. Şimdi dilerseniz override ettiğimiz find,getall metotlarını controllerların içinde yorum satırına alalım. Böylece her iki yöntemde bu projenin içerisinde kalmış olacak, isterseniz lazy loading ile ilgili olan 54. satırı silebilir, controllerlarda bulunan override kodları yorum satırı halinden çıkarabilir ve eskisi gibi çalışmaya devam edebilirsiniz. Ben CustomerController üzerinde bulunan find ve getall metodlarını yorum satırı haline aşağıdaki şekilde getirdim.

Peki şimdi postman üzerinde bir test yapalım ve bakalım organization bilgileri otomatik olarak gelecek mi?

Lazy loading testi
Lazy loading testi

Gördüğünüz gibi dönen json cevabı içerisinde organization sekmesi altında ilişkili olan kayıt otomatik olarak doldu.

Projenin buraya kadar olan kısmı ile ilgili sorun yaşıyorsanız bu link ile github üzerinden projeyi indirebilir ve kendi yazdığınız kodlar ile karşılaştırabilirsiniz. Sorularınız için yorum kısmını kullanabilir ya da mail adresim üzerinde benimle iletişime geçebilirsiniz.
Mail Adresim : mehmetalierol@windowslive.com

<- Önceki Post – Sonraki Post ->