Entity Framework Core #42 - Loading Related Data - Eager loading
Вставка
- Опубліковано 21 лип 2024
- Github : github.com/gncyyldz/EF-Core-T...
#efcore #orm #ormnedir #entityframeworkcore #codefirst #related #eager #loading
00:00 Giriş
05:00 Include
17:14 ThenInclude
28:06 Filtered Include
38:17 Eager Loading İçin Kritik Bir Bilgi
44:55 AutoInclude - EF Core 6
48:02 IgnoreAutoIncludes
50:08 Birbirlerinden Türetilmiş Entity'ler Arasında Include
Bu video Gençay Yıldız tarafından NGAkademi bünyesinde ücretsiz çekilmiştir.
Gençay Yıldız'ın Bloğu
www.gencayyildiz.com/blog/
Güncel Duyuru ve Bildiriler İçin Sosyal Medya Hesaplarımız
/ ngakademi.sosyal
/ ngakademi
/ ngakademii
Bana destek olmak için kanalıma üye olabilirsiniz:
/ gençay yıldız
Yaratmak ALLAHA mahsustur. Degerli bilgileriniz icin tesekkurler
Şüphesiz 🌹
Canim hocam
ramiz dayının portakalı soymadan içinden ne çıkacak bilemem dediği bizimde aynı şekilde include'yi beklediğimiz kısım geldi :D
Hocam dersleriniz o kadar güzel ki, tüm konuyu derinlemesine anladikca oturub ağlayasım var. 😢 🤭 Yine çok şey öyrəndik. Keşke bi 5-10 yıl önce tanışsaydık bu kanalla. Təşəkkürlər.
Valla dersleriniz tüm dillerde tercuman edilmeli ki, hər kes bu kadar farkli ve güzel anlatimdan faydalanmalı. Çünki anlatimin tarzinizin tek olduğuna inanıyorum. 🙏
19:13 Hocam valla güldürdün yav :D, Allahta seni güldürsün
emeğinize sağlık hocam. teşekkürler
19:10 , Aynı tepkiyi verdik hocam 😅, Emeğinize sağlık teşekkür ederim.
Teşekkürler emeğinize sağlık tek bir yol ile gösterip değilde bütün senaryolara değinmeniz mükemmel olmuş
Yazılım üstadı
Ağzınıza sağlık hocam
Hocamında dediği gibi dikkatlice bakarsanız arkadaşlar Microsoft dokümantasyonuna orda dediği şey şudur. Ana sorguya(İnitial query) eklenen ilişkisel verileri database'den getirir demektedir.
Burda Ana sorgu nedir Örneğin;
Context.Blogs.Tolist()'dir değil mi. Yani blogs tablosunu bize getir. yani Ana sorgudur bu sorgu aslında. işte eager loadingle ana sorguya ilişkisel veirleri ekleriz neyle tabikide include() ile
artık ana sorguya iliştirdiğimiz bu sorgu oluşur.
context.Blogs .Include(blog => blog.Posts).ToList(); => dedimki ana sorgu olan blog sorguma ek olarak post ilişkisel veriye "irademle" dahil et ve öyle tolist() et yani getir.
💯💯💯
Elinize yüreğinize sağlık hocam.
Mükemmelsiniz!!
çok teşekkür ederiz.
hocam yüreğinize sağlık harika
Hocam then include fonksiyonu çok kritik ve çok önemli ben bunu bilmediğimden dolayi bi ara baya gıcık etmişti bide 34:30 o kısımda anlattığıniz olay da bence çok önemli onu bilmeyen birisi kafayı yerdi öyle bir durumda
ya aynı durumu dün akşam yaşadım işten çıkmadan önce 2 3 saattir sorunu çözmeye çalışıyorum. viewComponent kullanıyorum bir çağırdığım controller da düzgün çalışıyor diğer çağırdığım controllerda tüm verileri getiriyor gerçekten hiçbiryerde sonuç bulamadım. En son gerçekten Gençay hocanın dediği aklıma geldi .AsNoTracking() i koyar koymaz düzeldi 😀
Yeni video mu gelmiş 😋
Teşekkürler hocam, çok faydalı, bol kritikli güzel bir dersti. Kaç gündür görüp vakit ayırıp izleyemiyordum :(
Ayrıca çok güzel videolar çekiyorsunuz velakin sosyal medya hesaplarınızı takip eden az sayıda insan var. Hassaten Twitter'da son video linkini bırakırsanız sizi takip edenler retweetlerse daha fazla kişiye ulaşabilir. Yabancı kaynaklarda bile böyle teferruatlı anlatan pek kişi yok, az tanınmanıza ben içerliyorum açıkçası :/
(Ya ben bunla uğraşmam derseniz ben uğraşırım isterseniz ^_^)
İsterim :)
hocam sizin visual studio nun teması çok hoş nerden yapabilirim acaba
Atom
Çok ufak bir şeye dikkat çekmek istiyorum. "AutoInclude()" kullandığımızda hocamızın bahsettiği ilişkisel veri eğer in memory'de mevcut ise gereksiz yere sürekli "include()" fonksiyonunu initial sorgunun üzerine ekleyeceğini düşünüyorum . Buda Hocamın bahsettiği mikro düzeydeki optimizasyona ters bir hareket olacaktır. Yada diğer ihtimal include etmeden önce in memery'de olup olmadığına bakıp yoksa ekliyor ise işte o zaman tam bir optimizasyon harikası olacaktır.
Not:EF Core'da tahmini iki davranışıda denemedim her iki ihtimalden özellikle ilkinin olabileceğini düşünüyorum.Deneyen birileri aydınlatırsa memnun olurum.
Ben departmanlar tablosu için denedim AutoInclude() fonksiyonunu:
modelBuilder.Entity().Navigation(d => d.Calisanlar).AutoInclude();
Daha sonra, ilk önce çalışanları ardından da departmanları çağırdım veri tabanından:
var calisanlar = context.Calisanlar.ToList();
var departmanlar = context.Departmanlar.ToList();
Sql Server Profiler'a baktığımda, Join ile departmanlar tablosuna çalışanlar tablosunu eklediğini gördüm:
SELECT [d].[Id], [d].[DepartmanAdi], [c].[Id], [c].[DepartmanId], [c].[Maas], [c].[Name]
FROM [Departmanlar] AS [d]
LEFT JOIN [Calisanlar] AS [c] ON [d].[Id] = [c].[DepartmanId]
ORDER BY [d].[Id]
Yani çalışanlar tablosunun verilerini, ram'de olsa bile join ile birleştirip getiriyor. O yüzden çıkarımım şudur ki AutoInclude() fonksiyonunu kullanıyorsak gereken noktalarda IgnoreAutoIncludes() fonksiyonunu kullanmazsak ilgili tablodaki verileri birleştirip getirmeye devam ediyor EF Core.
Bir önceki videoya attığım yorum eve varinca kendini imha edecektir.
Hocam video için teşekkürler burada bir soru aklıma takıldı izninizle sormak istiyorum. Include kullandığımız zaman SQL sorgusunda join oluşturuluyor fakat include kullanmadan select içerisinde navigation property çağırırsak örneğin şu şekilde:
context.Employees.Select(e => new {e.Region.Name})
yine join oluşuyor ve sıkıntısız verileri getiriyor. Açıkçası bahsettiğim 2 durum arasındaki farkı kavrayamadım. ChangeTracker ile alakalı bir durum mu bulunuyor burada? Böyle bir ikilem arasında kaldığımız vakit hangisini tercih etmeliyiz?
Hocam merhaba bir sorum olacaktı. Navigation Property'leri kullanmak istersek ama DB seviyesinde ForeignKey tanımlamasını engelleme gibi bir özellik mevcut mu Ef Core'da? Yani context.Employees.Include(x => x.Region) kullanmak istiyorum ancak bu aralarındaki relation sadece entity seviyesinde olsun, db'de FK tanımlamasın. Bu mümkün mü?
ahaha bazen bende böyle oluyorum 19:15
Gençay hocam bir sorum olacak umarım görüsünüz. Ef core da include ettiğim bir verinin sonrasında bellekte tutulduğu için bir daha kullanımına gerek olmadığı söylemişsiniz. GarbageCollector'un bu verileri silmesi durumu olmaz mı runtime'da.
Verilerimiz referans edildiği için silinmeyecektir.
Hocam eğer izniniz olursa bu seride not aldığım bilgiler ile medium yazısı yazmak istiyorum
Kaynak göstermenizi rica ediyorum.
İyi çalışmalar.