• Yapay zekadan makale özeti

    • Bu video, bir eğitmen tarafından sunulan Entity Framework Core eğitim serisinin bir parçasıdır. Eğitmen, ilişkisel verileri ekleme yöntemlerinden üçüncüsü olan lazy loading (tembel yükleme) konusunu detaylı şekilde anlatmaktadır.
    • Video, lazy loading'in ne olduğunu açıklayarak başlıyor ve proxy tabanlı lazy loading ile manuel lazy loading yöntemlerini adım adım gösteriyor. Eğitmen, I-LazyLoader interface ve delegate yapıları kullanarak lazy loading uygulamasını, navigation property'lerin virtual olarak işaretlenmesi gerektiğini ve lazy loading'in performans üzerindeki olumsuz etkilerini (N+1 problemi) açıklıyor.
    • Videoda ayrıca Entity Framework Core Abstractions kütüphanesinin kullanımı, entity'lerde parametre alan constructor'ların oluşturulması ve lazy loading'in debug süreçlerinde yanıltıcı olabileceği gibi pratik bilgiler de paylaşılıyor. Eğitmen, bir sonraki derste join yapılanmalarını (inner join, left join, right join) inceleyeceğini belirtiyor.
    00:02Lazy Loading Nedir?
    • Bu ders, Entity Framework Core eğitim serisinde ilişkisel verileri ekleme yöntemlerinden üçüncüsü olan lazy loading'ı inceleyecek.
    • Lazy loading, proxy'ler üzerinden veya proxy'ler olmaksızın gerçekleştirilebilen bir yöntemdir.
    • Dersin sonunda "n+1 problemi" olarak adlandırılan bir problem de değerlendirilecektir.
    01:01Lazy Loading'ın Çalışma Prensibi
    • Lazy loading, sorguyu oluşturup verileri çektikten sonra, ilişkisel tabloları temsil eden navigation property'ler üzerinde işlem yapıldığında sorgu oluşturulup veritabanında çalıştırılır.
    • Lazy loading, tembel yükleme anlamına gelir ve programatik olarak navigation property üzerinde işlem yapmaya karar verildiğinde sorgu arka planda oluşturulur ve execute edilir.
    • Bu yaklaşım, sorgu neticesinde elde edilen verilerin üzerinden ilişkisel verileri kullanmak istediğimizde, o anda o verilerin sorgularının oluşturulup execute edilip yüklenmesini sağlar.
    04:02Lazy Loading Örneği
    • Bir employ sorgusunda, employ üzerinden region veya orders ile ilgili veri göremeyiz çünkü bu veriler sorguya eklenmemiştir.
    • Lazy loading kullanmadan region'ın name'ini ekrana yazdırmaya çalıştığımızda, employ içerisindeki region null olduğu için uygulama patlayacaktır.
    • Lazy loading, ilgili navigation property kullanmak istediğimizde, o property karşılık veritabanındaki tabloyu sorgulayıp verileri getirir.
    06:08Proxy ile Lazy Loading
    • Lazy loading yaklaşımını uygulamak için genellikle Microsoft Entity Framework Core Proxys kütüphanesi kullanılır.
    • Proxy üzerinden lazy loading yapmak için DBContext'in OnConfiguring fonksiyonu içerisinde OptionsBuilder üzerinden UseLazyLoadingProxys fonksiyonu çağrılmalıdır.
    • Proxy üzerinden lazy loading için navigation propertylerin virtual ile işaretlenmiş olması gerekmektedir, aksi takdirde patlama meydana gelecektir.
    10:35Lazy Loading Kavramı
    • Lazy loading, verilerin tam olarak yüklenmeden önce ihtiyaç duyulduğunda arka planda sorgu oluşturulup verilerin çekildiği bir yöntemdir.
    • Lazy loading, genel merkezi konfigürasyonel noktada yapılan bir yapılandırma ile gerçekleştirilir.
    • Navigation propertyleri çağrıldığında arka planda karşılık gelen sorgu oluşturulup veriler çekilir.
    12:24Debug Sürecinde Lazy Loading Yanılgısı
    • Debug sürecinde lazy loading durumlarında, ilgili objenin içerisindeki propertilere bakıldığında verilerin yüklenmiş gibi görünmesi yanıltıcı olabilir.
    • Debug sırasında propertilere bakıldığında, virtual olan bu propertiler tetiklenir ve bunlarla ilgili sorgular arka planda oluşturulur.
    • Lazy loading'de tüm veriler topyekün belleğe yüklenmez, sadece navigation property tetiklendiğinde ilgili veriler belleğe yüklenir.
    15:08Proxy Olmadan Lazy Loading
    • Proxy yapılanmasıyla lazy loading hızlıca kullanılabilir, ancak bazen proxy'leri desteklemeyen platformlarda çalışmak gerekebilir.
    • Proxy'yi desteklemeyen platformlarda lazy loading iki farklı yöntemle uygulanabilir: ILazLoader interface'ini kullanarak veya delegate yapılanmalarını kullanarak.
    • ILazLoader interface'ini kullanmak için Microsoft Entity Framework Core Abstractions kütüphanesinin uygulamaya yüklenmesi gerekir.
    17:08Manuel Lazy Loading Uygulaması
    • Manuel lazy loading uygulamak için entity'lerin normal parametresiz constructor'ına ek olarak ILazLoader interface türünde parametre alan bir constructor daha oluşturulmalıdır.
    • Lazy loading için bir referans oluşturulur ve bu referans üzerinden get operasyonunda LazyLoader üzerinden lot operasyonu gerçekleştirilir.
    • Manuel yapılan lazy loading operasyonlarında navigation propertilerin virtual ile işaretlenmesine gerek yoktur.
    20:33Manuel Lazy Loading Uygulaması
    • Manuel yapılan lazy loading operasyonlarında navigation propertylerin virtual ile işaretlenmesine gerek yoktur.
    • Employ'da yapılan işlemi Rage'da da gerçekleştirmek için normal kontratlar ve I lazy loader türünden parametre alan kontratlar oluşturulmalıdır.
    • Lazyloader üzerinden load fonksiyonu çağrılırken, navigation property türü ile referansın türü aynı olmalıdır.
    22:35Lazy Loading Testi
    • Manuel olarak yapılan lazy loading çalışması test edilirken, order ve diğer entryler için de aynı işlemler tekrarlanmalıdır.
    • Proxy üzerinden yapılan lazy loading konfigürasyonu unutulduğunda uygulama patlayabilir, bu durumda proxy tabanlı lazy loading disable hale getirilmelidir.
    • Manuel lazy loading uygulandığında, navigation property'ler sorgulanmadan önce veritabanına sorgu gönderilmez.
    25:51Delegate ile Lazy Loading
    • Herhangi bir kütüphaneye bağımlı kalmak istemeyenler için delegate yapıları kullanılarak lazy loading yapılabilir.
    • Delegate üzerinden lazy loading için action türünden bir obje ve string parametre alınır; obje entity türünü, string ise navigation property ismini belirtir.
    • Delegate üzerinden yapılan lazy loading için load fonksiyonu dahil edilmesi için extension fonksiyonu oluşturulmalıdır.
    30:27Lazy Loading Geliştirme
    • Lazy loading için delegate'i tetiklemek gerekiyor ve bu işlem için invok kullanılabilir.
    • Invok fonksiyonu iki parametre istiyor: entity ve navigation property.
    • Navigation property'nin ismini almak için ColorMemberName attribute'u kullanılacak ve bu parametre için default değer verilmeli.
    33:45Lazy Loading Uygulaması
    • Lazy loading fonksiyonu üzerinden action tetikleniyor ve navigation property geriye döndürülüyor.
    • Delegate'ler sayesinde lazy loading oluşturuluyor.
    • Yazılımcılar, herhangi bir kütüphaneye bağımlı kalmaksızın delegate'ler üzerinden lazy loading uygulayabilmektedir.
    35:54N+1 Problemi
    • Lazy loading operasyonunda N+1 problemi meydana çıkabiliyor.
    • Örnek olarak, bir rage'ı elde edip, bu rage'nin altındaki employları ve employların altındaki order'ları ekrana yazdırmaya çalışabiliriz.
    • Veritabanından destek alınarak, ankara'nın altında iki employ olduğu ve bu employların orderları da mevcut olduğu örneklendiriliyor.
    38:41Lazy Loading'in Maliyetli Olduğu Gösterimi
    • Kodda "rag" ve "context" kullanılarak "fighting" ile bir id'ye sahip olan "rasi" elde ediliyor ve foreach ile "employ"lara giriş yapılıyor.
    • Her bir "employ" içerisindeki "orders"lar elde ediliyor ve her bir "order"ın tarihi ekrana yazdırılıyor.
    • Uygulama çalıştırıldığında, "order"ların birkaç kere tetiklendiği görülüyor; her bir "employ" için ayrı bir "order" sorgusu oluşturuluyor.
    41:18N+1 Problemi ve Lazy Loading'in Sorunları
    • Lazy loading'in maliyetli olduğu, her bir döngüye karşılık her bir tetiklenmeye karşılık tekrar tekrar sorgu oluşturup gönderdiği görülüyor.
    • Bu durum "N+1 problemi" olarak değerlendiriliyor ve ekstra maliyet oluşturuyor.
    • Lazy loading'i kullanırken dikkatli olunması ve mümkün mertebe kullanılmaması öneriliyor.
    42:25Lazy Loading'in Kullanım Önerileri
    • Lazy loading, maliyetlidir ve döngüsel işlemlerde her bir tetiklemeye karşılık navigation propertylerin tetiklenmesine karşılık sorgu üretip execut etmektedir.
    • Lazy loading kullanım açısından oldukça maliyetli ve performans düşürücü bir etkiye sahip yöntemdir.
    • Mikro düzeyde optimizasyona ihtiyaç duyulan sorgulamalarda lazy loading kullanılıyorsa, bunu kapatıp daha optimize edilmiş çalışmalarla sorguların generasyonu tavsiye ediliyor.
    44:55Bir Sonraki Ders Hakkında Bilgi
    • Bir sonraki derste join yapılanmaları (inner join, left join, right join) Entity Framework Core üzerinden incelenecek.
    • Diğer başlıklar arasında view, store prosedür, query lock, query tag, global query filter ve data concurrency yapılanması yer alacak.
    • İleri düzeyde birçok konu sonraki derslerde ele alınacak.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor