EF を使用して複数のエンティティを並行して挿入する際に問題が発生しています。WCF 操作は、多くのプロセスによって呼び出され、各呼び出しで異なる分散トランザクションを持つエンティティを生成します。SQL サーバー プロファイラーで確認できるように、次の SQL が生成されます。
(@0 int,@1 nvarchar(32),@2 datetime2(7),@3 nvarchar(64),@4 int,@5 int,@6 bit)
insert [dbo].[CommandRequests](
[CommandId]
, [DeviceId]
, [StartDateTime]
, [EndDateTime]
, [Parameters]
, [Caller]
, [Result]
, [Priority]
, [Timeout]
, [ParentRequestId]
, [IsSuccessful]
, [Host])
values (@0, @1, @2, null, null, @3, null, @4, @5, null, @6, null)
select [CommandRequestId]
from [dbo].[CommandRequests]
where @@ROWCOUNT > 0 and [CommandRequestId] = scope_identity()
したがって、EF は挿入を行い、後で選択を行います。並行して行われるため、それらの多くはデッドロックによって中止されます。
4.1 や 4.2 ではなく、EF 4.0 を使用しています。
これを解決する方法はありますか?私はこれを見たことがありますが、かなり古いものです: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/4f634d8f-1281-430b-b664-ec7ca413b387/