При использовании DbContext в первом сценарии базы данных я обнаружил, что добавление и удаление объектов происходит очень медленно по сравнению с ObjectContext. Если добавить 2000 объектов и сохранить изменения в конце, DbContext в 3 - 5 раз медленнее ObjectContext (кстати, я знаю, что добавление большого количества объектов было бы лучше с использованием SqlBulkCopy, но это не так). Если сохранение изменений после каждого добавления DbContext по-прежнему почти в два раза медленнее. Когда дело доходит до удаления, это даже ухудшается: при сохранении в конце всех абзацев сущности DbContext примерно в 18 раз медленнее ObjectContext.
Я использовал свое высокоразвитое тестовое приложение, которое я использую для сравнения технологий доступа к базам данных и небольшого консольного приложения для двойной проверки. Оба показали плохие результаты для добавления и удаления объектов с использованием DbContext. Ниже приведены результаты консольного приложения:
Inserting 2000 entities via DbContext saving changes at the end: 2164ms
Inserting 2000 entities via ObjectContext saving changes at the end: 457ms
Inserting 2000 entities via DbContext saving changes after each object addition: 8420ms
Inserting 2000 entities via ObjectContext saving changes after each object adding: 4857ms
Inserting 2000 entities via DbContext using a new DbContext for each object addition: 4018ms
Deleting 2000 entities via DbContext saving changes at the end: 4794ms
Deleting 2000 entities via ObjectContext saving changes at the end: 261ms
Deleting 2000 entities via DbContext saving changes after each object deletion: 25536ms
Deleting 2000 entities via ObjectContext saving changes after each object deletion: 2110ms
Я попытался использовать EF 4.3 в VC 2010 и EF 5.0 Beta 2 в VS 11 с почти такими же результатами. Я использовал шаблоны T4, предоставленные "EF 4.x POCO Entity Generator для С#", "EF 4.x DbContext Generator для С#" и "EF 5.x DbContext Generator для С#".
Что может быть неправильным? Согласно результатам теста, я никогда не использовал бы DbContext в приложении, которое должно добавлять или удалять объекты (что делает DbContext непригодным для использования для меня).
Я помещал тестовые приложения консоли на свой веб-сервер: EF 4.3 DbContext Test, EF 5.0 DbContext Test
Любые идеи/исправления приветствуются.