OptimisticConcurrencyException — SQL 2008 R2 вместо триггера вставки с платформой объекта

Используя SQL ноябрь R2 2008 выпускают базу данных и ролевое приложение рабочего .net 4.0 Beta 2 Azure. Роль рабочего собирает данные и вставляет их в единственную таблицу SQL с одним столбцом идентификационных данных. Поскольку, вероятно, будет несколько экземпляров этого ролевого выполнения рабочего, я создал Вставку Вместо, включают таблицу SQL. Триггер выполняет функциональность Upsert с помощью функции Слияния SQL. Используя T-SQL я смог проверить, что вставка вместо триггера функционирует правильно, новые строки были вставлены, в то время как существующие строки были обновлены. Это - код для моего триггера:

Create Trigger [dbo].[trgInsteadOfInsert] on [dbo].[Cars] Instead of Insert
as
begin
set nocount On

merge into Cars as Target
using inserted as Source
on Target.id=Source.id AND target.Manufactureid=source.Manufactureid
when matched then 
update set Target.Model=Source.Model,
Target.NumDoors = Source.NumDoors,
Target.Description = Source.Description,
Target.LastUpdateTime = Source.LastUpdateTime,  
Target.EngineSize = Source.EngineSize
when not matched then
INSERT     ([Manufactureid]
       ,[Model]
       ,[NumDoors]
       ,[Description]
       ,[ID]
       ,[LastUpdateTime]
       ,[EngineSize])
 VALUES
       (Source.Manufactureid,
       Source.Model,
       Source.NumDoors,
       Source.Description,
       Source.ID,
       Source.LastUpdateTime,
       Source.EngineSize);
  End

В роли рабочего я использую Платформу Объекта для объектной модели. Когда я называю метод SaveChanges I receieve следующее исключение:

OptimisticConcurrencyException
Store update, insert, or delete statement affected an unexpected number of rows (0).    Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

Я понимаю, что это likly из-за SQL, не сообщающего, IdentityScope для каждого нового вставил/обновил строку. Затем EF думает, что строки не были вставлены, и транзакция в конечном счете не не фиксируется.

Что лучший способ состоит в том, чтобы обработать это исключение? Возможно, использование ВЫВОДА от SQL объединяет функцию?

Спасибо! - Paul

8
задан PaulWaldman 27 November 2009 в 04:58
поделиться