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