19, May 2025
AsNoTracking() Nedir?

AsNoTracking(), Entity Framework Core’un, sorgudan dönen nesneleri değişiklik izleme (change tracking) kapsamı dışında tutmasını sağlar. Yani EF Core, bu nesnelerin sonradan güncellenip güncellenmediğini takip etmez. Bu da daha az bellek kullanımı ve daha hızlı sorgu performansı sağlar.


📈 Ne Zaman Kullanılır?

  • Sadece veri okunacaksa, örneğin bir listeleme ekranında.
  • Veriler güncellenmeyecekse.
  • Read-Only işlemlerde performansı artırmak için.

🧠 Ne Zaman Kullanılmaz?

  • Eğer entity üzerinde değişiklik yapıp, SaveChanges() ile veritabanına kaydedecekseniz kullanmayın.
  • Çünkü EF, bu nesneyi izlemeyecek ve değişiklikleri fark etmeyecektir.

✅ Örnek Kullanım

csharpKopyalaDüzenlevar products = await _context.Products
    .AsNoTracking()
    .Where(p => p.Price > 100)
    .ToListAsync();

Burada Products listesinden sadece fiyatı 100’den büyük olanlar alınır ve EF Core bu entity’leri izlemez.


🔄 Normal İzleme ile Fark

csharpKopyalaDüzenle// Normal (Tracking ile)
var product = await _context.Products.FirstOrDefaultAsync(p => p.Id == 1);
product.Name = "Yeni İsim";
await _context.SaveChangesAsync(); // Bu değişikliği kaydeder
csharpKopyalaDüzenle// AsNoTracking ile
var product = await _context.Products
    .AsNoTracking()
    .FirstOrDefaultAsync(p => p.Id == 1);
product.Name = "Yeni İsim";
await _context.SaveChangesAsync(); // Bu çalışmaz! EF değişikliği fark etmez

🛠️ Not: AsNoTrackingWithIdentityResolution()

EF Core 5.0+ ile gelen bu özellik, ilişkili nesnelerde tekrarlayan entity örneklerini engeller ama hâlâ NoTracking özelliğini korur. Eğer ilişkili verilerle çalışıyorsanız ama performans istiyorsanız bu yöntem de değerlendirilebilir.


🧩 Performans Kıyaslaması

  • Tracking: Daha fazla bellek kullanır ama güncelleme mümkündür.
  • AsNoTracking: Daha az kaynak kullanır, daha hızlıdır, ama güncelleme yapılamaz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir