ÇOĞU POCO varlığı kullanılırken, bir varlığın nasıl değiştiğinin belirlenmesi (ve bu nedenle veritabanına hangi güncelleştirmelerin gönderilmesi gerektiği) Değişiklikleri Algıla algoritması tarafından işlenir. Değişiklikleri Algıla varlığın geçerli özellik değerleri ile varlık sorgulandığında veya eklendiğinde anlık görüntüde depolanan özgün özellik değerleri arasındaki farkları algılayarak çalışır. Bu konu başlığında gösterilen teknikler, gerek Code First gerekse EF Designer ile oluşturulan modellere için geçerlidir.
Varsayılan olarak, Entity Framework aşağıdaki yöntemler çağrıldığında Değişiklikleri Algıla işlemini otomatik olarak gerçekleştirir:
DbSet.Find
DbSet.Local
DbSet.Add
DbSet.AddRange
DbSet.Remove
DbSet.RemoveRange
DbSet.Attach
DbContext.SaveChanges
DbContext.GetValidationErrors
DbContext.Entry
DbChangeTracker.Entries
Değişiklikleri otomatik algılamayı devre dışı bırakma
Bağlamınızdaki çok sayıda varlığı izliyorsanız ve bu yöntemlerden birini döngü içinde birçok kez çağırırsanız, döngü süresince değişiklikleri algılamayı kapatarak önemli performans iyileştirmeleri elde edebilirsiniz. Örnek:
using (var context = new BloggingContext())
{
try
{
context.Configuration.AutoDetectChangesEnabled = false;
// Make many calls in a loop
foreach (var blog in aLotOfBlogs)
{
context.Blogs.Add(blog);
}
}
finally
{
context.Configuration.AutoDetectChangesEnabled = true;
}
}
Döngüden sonra değişikliklerin algılanmasını yeniden etkinleştirmeyi unutmayın— Döngüdeki kod bir özel durum oluştursa bile her zaman yeniden etkinleştirildiğinden emin olmak için bir try/finally kullandık.
Devre dışı bırakmanın ve yeniden etkinleştirmenin bir alternatifi, değişiklikleri otomatik algılamayı her zaman ve çağrı bağlamını kapalı bırakmaktır. ChangeTracker.DetectChanges açıkça veya değişiklik izleme proxy'lerini özenle kullanın. Bu seçeneklerin her ikisi de gelişmiştir ve uygulamanıza kolayca ince hatalar ekleyebilir, bu nedenle bunları dikkatli kullanın.
Bir bağlamda çok sayıda nesne eklemeniz veya kaldırmanız gerekiyorsa, DbSet.AddRange ve DbSet.RemoveRange kullanmayı göz önünde bulundurun. Bu yöntemler, ekleme veya kaldırma işlemleri tamamlandıktan sonra değişiklikleri yalnızca bir kez otomatik olarak algılar.
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Bu modül, veri erişim projesi oluşturma adımları boyunca size yol gösterir. Entity Framework Core (EF Core) kullanarak ilişkisel bir veritabanına bağlanır ve oluşturma, okuma, güncelleştirme ve silme (CRUD) sorguları oluşturursunuz.