При использовании DbContext в первом сценарии базы данных я обнаружил, что добавление и удаление объектов происходит очень медленно по сравнению с ObjectContext. Если добавить 2000 объектов и сохранить изменения в конце, DbContext в 3 - 5 раз медленнее, чем ObjectContext (кстати, я знаю, что добавление большого количества объектов будет лучше использовать SqlBulkCopy, но это не так). Если сохранение изменений после каждого добавления DbContext по-прежнему почти в два раза медленнее. Когда дело доходит до удаления, это даже ухудшается: при сохранении в конце всех абзацев сущности DbContext примерно в 18 раз медленнее ObjectContext.DbContext очень медленно при добавлении и удалении
Я взял свое высокоразвитое тестовое приложение, которое я использую для сравнения технологий доступа к базе данных и небольшого консольного приложения для двойной проверки. Оба показали плохие результаты для добавления и удаления объектов с использованием 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 для C#», «EF 4.x DbContext Generator для C#» и «EF 5.x DbContext Generator для C#».
Что может быть неправильным? Согласно результатам тестирования я никогда не использовал бы DbContext в приложении, которое должно добавлять или удалять объекты (что делает DbContext к сожалению непригодным для меня).
Я положил приложений тестирования консоли на моем веб-сервере: EF 4.3 DbContext Test, EF 5.0 DbContext Test
Любые идеи/исправления приветствуются.
Две ссылки в дополнение к Ladislavs: http://stackoverflow.com/questions/5943394/why-is-inserting-entities-in-ef-4-1-so-slow-compared-to-objectcontext/5943699 # 5943699 и http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework/5942176#5942176 – Slauma