sql >> Base de Datos >  >> RDS >> Sqlserver

error al insertar en la tabla que tiene en lugar de desencadenar desde el marco de datos de la entidad

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();