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, DbContext
API'de varsayılan olarak etkindir .
API'den DbContext
bu kadar farklı davranmasının nedeni , otomatik değişiklik algılama etkinleştirildiğinde API'nin ObjectContext
birçok işlevinin DbContext
API işlevlerinden daha DetectChanges
dahili 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
, Entry
Veya SaveChanges
üyeler üzerindeDbContext
Entries
yöntemDbChangeTracker
Özellikle yaşadığınız düşük performanstan sorumlu olan Add
aramalar DetectChanges
.
Bunun aksine, ObjectContext
API DetectChanges
yalnızca otomatik olarak gelir, SaveChanges
ancak içeride değil AddObject
ve yukarıda belirtilen diğer ilgili yöntemler. Varsayılan performansının ObjectContext
daha hızlı olmasının nedeni budur .
Neden bu DbContext
kadar ç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 DetectChanges
uygun noktalarda manuel olarak aramak gelişmiş olarak kabul ediliyor ve uygulamanıza kolayca ince hatalar ekleyebileceği için [it] 'i dikkatli kullanın .