Entity Framework Core: AsNoTracking & Eager Loading
Sadece okuma yapacağın sorgularda EF Core'un hafıza takip mekanizmasını kapatıp performansı 3 katına çıkarmaktır.
5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)
Müzedeki tarihi esere sadece gözünle bakmaktır. Eline kalem alıp üstünü çizmene gerek olmadığı için güvenlik görevlisinin seni adım adım takip etmesine gerek kalmaz.
Teknik ve Profesyonel Tanımı
EF Core ChangeTracker mekanizması çekilen nesnelerin durumunu (Modified, Deleted vs.) izler. AsNoTracking() bu takibi kapatarak bellek tüketimini azaltır ve sorguyu hızlandırır. Eager Loading (.Include) ise ilişkili veriyi tek SQL JOIN ile getirir.
Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)
"AsNoTracking(), veritabanından sadece okuma yapılacak (güncelleme yapılmayacak) sorgularda Change Tracker yükünü ortadan kaldırarak RAM ve CPU tasarrufu sağlar. İlişkili verilerde ise Lazy Loading yerine .Include() kullanarak N+1 sorgu problemini engelleriz."
.NET Core (C#) Kod Örneği
// Sadece okuma: AsNoTracking() ile 3x daha hızlı
var users = await _context.Users
.AsNoTracking()
.Include(u => u.Orders) // Eager loading
.Where(u => u.IsActive)
.ToListAsync();
AsNoTracking() ile çekilen bir nesnenin property'sini değiştirip _context.SaveChangesAsync() derseniz veritabanına YANSIMAZ!
İlgili Diğer Konular
Service Lifetimes: Transient, Scoped, Singleton
.NET IoC konteynerine bir nesneyi ne sıklıkla üretip ne zama...
Async / Await & Thread vs Task
Uzun süren veritabanı veya HTTP isteklerinde işlemci çekirde...