2

.NET4用の新しいEntityFrameworkで奇妙な問題が発生しています

SQL Server 2005(EXPRESS)データベースがあり、サービスはエンティティフレームワークを使用して2つのテーブルにデータを書き込みます。テーブルがTableAとTableBであるとしましょう。TableBにはTableAへの外部キーがあります。私のプログラムには、データを並列に書き込むスレッドがいくつかあります。各スレッドには独自のObjectContextがあります。プログラムはTableAオブジェクトを作成し、それをオブジェクトコンテキストに配置します。次に、TableBのオブジェクトが作成され、オブジェクトコンテキストに配置されます。これは、いくつかのTableAアイテムに対して繰り返されます。

最後に、ObjectContext.Saveメソッドが呼び出されると、ログにデッドロックエラーが表示されます。

System.Data.SqlClient.SqlException:トランザクション(プロセスID 56)が別のプロセスのロックリソースでデッドロックされ、デッドロックの犠牲者として選択されました。トランザクションを再実行します。

特定のデータベースでのみ再現されるため、データベースのオプションに依存しているようです。1つの新しいデータベースの問題は再現されていません。Entity Frameworkがバッチ挿入を実行している間、どのデータベース\テーブル設定がデッドロックに影響を与える可能性がありますか?それともどこか別の問題かもしれませんか?

4

1 に答える 1

1

あなたのコメントごと:

TableB には、問題が再現されたデータベースに設定された primaryKey がありませんでした

于 2011-08-17T22:31:27.933 に答える