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