Используя Entity Framework 4.1, решение, опубликованное Ladislav для добавления Select of Scope_Identity () в конец тела триггера, решило проблему для меня. Я скопировал все создание триггера здесь для полноты. С помощью этого триггера я смог добавить строки в таблицу, используя context.SaveChanges ().
ALTER TRIGGER [dbo].[CalcGeoLoc]
ON [dbo].[Address]
INSTEAD OF INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT OFF;
-- Insert statements for trigger here
INSERT INTO Address (Street, Street2, City, StateProvince, PostalCode, Latitude, Longitude, GeoLoc, Name)
SELECT Street, Street2, City, StateProvince, PostalCode, Latitude, Longitude, geography::Point(Latitude, Longitude, 4326), Name
FROM Inserted;
select AddressId from [dbo].Address where @@ROWCOUNT > 0 and AddressId = scope_identity();
END
Редактировать для обработки вычисленных значений (Спасибо Крису Моргану в комментариях):
Если у вас есть какие-либо другие вычисленные значения в таблице, вы должны будете также включить их в SELECT. Например, если у вас есть столбец CreatedDate
, который использует GETDATE()
, вы сделаете выбор следующим образом:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();