У нас проблема с вставкой нескольких объектов с 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 дает нам вставку, а затем выбор. Поскольку это делается параллельно, многие из них прерываются из тупика.
Мы используем EF 4.0, а не 4.1 или 4.2.
Есть идеи, как это решить? Я видел это, но оно довольно старое:
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/4f634d8f-1281-430b-b664-ec7ca413b387/