0

内部キャッシュ/状態をクリアするように EF4 DbContext に指示するにはどうすればよいですか?

トランザクション内でEF4を介してさまざまなテーブルで多数の挿入を実行するデータベース更新プログラムがあります。更新が進むにつれて、共通のアクセス許可テーブルへの挿入がますます遅くなることがわかりました。

以下の制約があります。

1) すべてが 1 つの (巨大な) トランザクション内で発生する必要があります。

2) MSDTC への依存を導入できないため、相互接続トランザクションを作成できません。

3) 既に開いている SqlConnection の新しい DbContext を開くことができないようです。「EntityConnection は、閉じた DbConnection でのみ構築できます」というエラーが発生します。(複数の DbContext の間で既に SqlConnection を共有していますが、それらがすべて初期化された後にのみ接続を開くことに注意してください)

これらの制約があるため、トランザクションが中断されるため、作業のチャンクごとに新しい DbContext を作成することはできません。

これらの機能上の制約は満たしていますが、パフォーマンスはよくありません。DbContext は、DbSet に挿入されるデータの量を処理するのに苦労していると思われます。

DbContext に内部キャッシュをリセットするように指示するにはどうすればよいですか (たとえば、最近挿入した行はもう気にしません)。

4

2 に答える 2

1

アプリケーションでは、Entity Framework を組み合わせて使用​​してデータを読み取り、小さな挿入と更新を行い、一括挿入と更新に ADO.NET DataAdapters を使用できますhttp://msdn.microsoft.com/en-us/library/aadf8fk2​​. aspx

または、EF5 http://msdn.microsoft.com/en-us/library/gg679456(v=vs.103).aspxの ExecuteSQLCommand を使用して、ストアド プロシージャと組み合わせて挿入を行い、Table パラメータを渡して渡すこともできます。バルクデータ。EF4 では ExecuteStoreCommand ですhttp://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executestorecommand.aspx

于 2013-09-16T04:40:01.900 に答える