Yorumda Ladislav tarafından daha önce belirtildiği gibi, performansı iyileştirmek için otomatik değişiklik algılamayı devre dışı bırakmanız gerekir:
context.Configuration.AutoDetectChangesEnabled = false;
Bu değişiklik algılama, DbContextAPI'de varsayılan olarak etkindir .
API'den DbContextbu kadar farklı davranmasının nedeni , otomatik değişiklik algılama etkinleştirildiğinde API'nin ObjectContextbirçok işlevinin DbContextAPI işlevlerinden daha DetectChangesdahili olarak çağırmasıdır ObjectContext.
BuradaDetectChanges varsayılan olarak çağıran işlevlerin bir listesini bulabilirsiniz . Onlar:
Add, Attach, Find, Local, Veya Removeüyeler üzerindeDbSet
GetValidationErrors, EntryVeya SaveChangesüyeler üzerindeDbContext
EntriesyöntemDbChangeTracker
Özellikle yaşadığınız düşük performanstan sorumlu olan Addaramalar DetectChanges.
Bunun aksine, ObjectContextAPI DetectChangesyalnızca otomatik olarak gelir, SaveChangesancak içeride değil AddObjectve yukarıda belirtilen diğer ilgili yöntemler. Varsayılan performansının ObjectContextdaha hızlı olmasının nedeni budur .
Neden bu DbContextkadar çok işlevde bu varsayılan otomatik değişiklik algılamayı tanıttılar ? Emin değilim, ancak görünüşe göre onu devre dışı bırakmak ve DetectChangesuygun noktalarda manuel olarak aramak gelişmiş olarak kabul ediliyor ve uygulamanıza kolayca ince hatalar ekleyebileceği için [it] 'i dikkatli kullanın .