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
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.