Използвайки 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();