Usando Entity Framework 4.1, la solución publicada por Ladislav para agregar un Select de Scope_Identity() al final del cuerpo del activador me resolvió el problema. He copiado toda la creación del gatillo aquí para completar. Con esta definición de activación pude agregar filas a la tabla usando 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
Editar para manejar valores calculados (Gracias a Chris Morgan en los comentarios):
Si tiene otros valores calculados en la tabla, también deberá incluirlos en SELECCIONAR. Por ejemplo, si tuviera una CreatedDate
columna que usa GETDATE()
haría la selección así:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();