У меня есть класс CF:
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 при использовании параллелизма в поле метки времени?
Обновлено
Существует первичный ключ (также добавлен в приведенный выше пример).
Обновление 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()
Проблема в том, что селектор ничего не возвращает.