コメントでLadislavがすでに示しているように、パフォーマンスを向上させるには、自動変更検出を無効にする必要があります。
context.Configuration.AutoDetectChangesEnabled = false;
この変更検出は、DbContextAPIでデフォルトで有効になっています。
APIとのDbContext動作が大きく異なる理由は、自動変更検出が有効になっている場合、APIの関数よりもObjectContext多くのDbContextAPIのDetectChanges関数が内部で呼び出すObjectContextためです。
ここではDetectChanges、デフォルトで呼び出される関数のリストを見つけることができます。彼らです:
Add、Attach、Find、Local、またはRemove上のメンバーDbSet
GetValidationErrors、EntryまたはSaveChanges上のメンバーDbContext
- 上の
Entries方法DbChangeTracker
特に、あなたが経験したパフォーマンスの低下の原因AddとDetectChangesなる呼び出し。
これとは対照的に、ObjectContextAPIは、上記の他の対応するメソッドではなく、でDetectChanges自動的に呼び出されます。これが、のデフォルトのパフォーマンスが速い理由です。SaveChangesAddObjectObjectContext
なぜ彼らはこのデフォルトの自動変更検出DbContextを非常に多くの機能に導入したのですか?よくわかりませんが、無効にDetectChangesして適切な場所で手動で呼び出すことは高度であると見なされ、アプリケーションに微妙なバグを簡単に導入する可能性があるため、注意して使用してください。