.NET Core (C#) Orta Seviye Veritabanı & ORM

EF Core: AsNoTracking, Eager vs Lazy Loading & Split Queries

Sadece okuma yapacağın sorgularda EF Core'un hafıza takip mekanizmasını kapatıp performansı katlamaktı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 & Mimari 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. Çoklu ilişkilerde kartezyen patlamayı önlemek için AsSplitQuery() kullanılır.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“AsNoTracking(), veritabanından sadece okuma yapılacak sorgularda Change Tracker yükünü ortadan kaldırarak RAM ve CPU tasarrufu sağlar. Çok fazla tablo Include edildiğinde oluşan kartezyen çarpımı engellemek için ise .AsSplitQuery() ile sorgu ayrı SELECT ifadelerine bölünür.”

.NET Core (C#) Örnek Uygulaması
var users = await _context.Users
    .AsNoTracking()
    .Include(u => u.Orders)
    .AsSplitQuery() // Kartezyen patlamayı engeller
    .Where(u => u.IsActive)
    .ToListAsync();
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

AsNoTracking() ile çekilen bir nesnenin property'sini değiştirip _context.SaveChangesAsync() derseniz veritabanına YANSIMAZ!