Як вже зазначав Ладіслав у коментарі, вам потрібно відключити автоматичне виявлення змін, щоб покращити продуктивність:
context.Configuration.AutoDetectChangesEnabled = false;
Це виявлення змін увімкнено за замовчуванням в DbContext
API.
Причина, по якій DbContext
поводиться настільки відрізняється від ObjectContext
API, полягає в тому, що набагато більше функцій DbContext
API буде викликати DetectChanges
внутрішньо, ніж функції ObjectContext
API, коли ввімкнено автоматичне виявлення змін.
Тут ви можете знайти перелік тих функцій, які викликаються DetectChanges
за замовчуванням. Вони є:
- В
Add
, Attach
, Find
, Local
, або Remove
члени наDbSet
- В
GetValidationErrors
, Entry
або SaveChanges
члени наDbContext
Entries
спосіб поDbChangeTracker
Особливо Add
дзвінки, DetectChanges
які відповідають за погану роботу, яку ви пережили.
На відміну від цього, ObjectContext
API викликає DetectChanges
лише автоматично в, SaveChanges
але не в, AddObject
та інші відповідні методи, згадані вище. Це причина, чому швидкість роботи за замовчуваннямObjectContext
швидша.
Чому вони запровадили це автоматичне виявлення змін за замовчуванням DbContext
у стільки функцій? Я не впевнений, але здається, що його відключення та виклик DetectChanges
вручну у відповідних точках вважається розширеним і може легко внести в ваш додаток витончені помилки, тому використовуйте [це] обережно .