AsNoTracking() nedir, ne işe yarar?

alattin (17127) 5 yıl önce sordu

 Entity Framework sorgularda AsNoTracking() ne işe yarar? Ne zaman ve hangi durumda AsNoTracking() kullanılmalıdır? Performans açısından AsNoTracking kullanmak veya kullanmamak arasında bir fark var mı?

Toplam 1 cevap


alattin (17127) 5 yıl önce cevapladı

Entity'ler üzerindeki işlemler sürekli izlenir. Bir Entity'de değişiklik, güncelleme yapıldıysa SaveChanges() metodu ile bu değişiklikler veritabanına yansıtılır.  Bu şekilde entity üzerindeki değişiklik kalıcı hale getirilir.

Fakat biz herzaman entity'ler üzerinde değişiklik yapmayız. Çoğu zaman sadece okumaya dayalı işlemler yaparız. Varsayılan olarak Enitity Framework üzerinde yaptığımız işlemlerde bu "takip" aktif durumdadır. Çoğu zamanda okuma işlemi yaptığımız için bu performans kaybına yol açar.

İşte bu durumda izleme yapmadan, sadece okunabilir işlemler için AsNoTracking kullanılır.  AsNoTracking kullanıldığında Entity üzerinde değişiklik var mı yok mu  Context tarafından izlemenmez.

Örnegin Kisiler adında bir entity'miz var. Bunu ekranda listeleyeceksek

 

context.Kisiler.AsNoTracking().ToList()

şeklinde sorgumuzu oluşturmak performans artışı sağlayacaktır.

Normalde 

context.Kisiler.ToList()

yaptığımızda izleme devrede olacaktır.  Bu da gereksiz kaynak kullanımı demektir.

AsNoTracking,  Entity Framework de performans optimizasyonu için kullanılabilecek güzel bir ifadedir. Sadece okuma gerektiren işlemlerde güvenle kullanılabilir.