У меня есть класс CF:EF CF 4.2 и SQL Вместо вставки триггера
public class A
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get;set;}
[Required]
public string Name {get;set;}
public string LoweredName {get;set;}
[Timestamp]
public byte[] RowVersion {get;set;}
}
В базе данных у меня есть триггер:
CREATE TRIGGER IOI_LoweredName
ON Abc
INSTEAD OF INSERT
AS;
BEGIN;
SET NOCOUNT ON;
INSERT INTO Abc(Name, LoweredName) SELECT Name, LOWER(Name) FROM inserted
END;
Теперь, если я пытаюсь вставить запись:
dc.Names.Add(new A { Name = "Test" });
dc.SaveChanges();
Я получаю следующее сообщение об ошибке:
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.
Любые идеи, как обойти это? Все мои классы наследуют от базового класса, который имеет столбец RowVersion (Timestamp). Не могу ли я использовать такой простой триггер с EF при использовании параллелизма в поле timestamp?
Обновлено
Существует первичный ключ (также добавили его в приведенном выше примере).
Update 2
Это из SQL Profiler:
declare @0 nvarchar(100)
set @0=N'Test'
insert [dbo].[abc]([Name], [LoweredCompanyName]) values (@0, null)
select [Id], [RowVersion] from [dbo].[Abc] where @@ROWCOUNT > 0 and [Id] = scope_identity()
Проблема заключается в том, что выбор не возвращает ничего.
Вы действительно получаете сообщение об ошибке, когда вы вызываете SaveChanges или позже в коде? –
Когда он пытается выполнить SaveChanges(). – Patrick
Действительно ли ваш триггер не вставляет RowVersion или это просто упрощение? –