データベース優先のシナリオで DbContext を使用すると、エンティティの追加と削除が ObjectContext に比べて非常に遅いことがわかりました。2000 個のエンティティを追加して最後に変更を保存すると、DbContext は ObjectContext よりも 3 倍から 5 倍遅くなります (ちなみに、大量のエンティティを追加するには SqlBulkCopy を使用する方がよいことはわかっていますが、それは重要ではありません)。追加のたびに変更を保存する場合、DbContext は依然として約 2 倍遅くなります。削除に関してはさらに悪化します。すべてのエンティティの削除の最後に保存する場合、DbContext は ObjectContext よりも約 18 倍遅くなります。
データベース アクセス テクノロジを比較するために使用する高度に開発されたテスト アプリケーションと、小さなコンソール アプリケーションを使用して再確認しました。どちらも、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
VC 2010 で EF 4.3 を、VS 11 で EF 5.0 Beta 2 を使用してみましたが、ほぼ同じ結果でした。「EF 4.x POCO Entity Generator for C#」、「EF 4.x DbContext Generator for C#」、「EF 5.x DbContext Generator for C#」で提供される T4 テンプレートを使用しました。
何が間違っている可能性がありますか?テスト結果によると、エンティティを追加または削除する必要があるアプリケーションで DbContext を使用することはありません (残念ながら DbContext を使用できない理由)。
コンソール テスト アプリケーションを Web サーバーに配置しました: EF 4.3 DbContext Test、EF 5.0 DbContext Test
アイデア/修正は大歓迎です。