Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

erro ao inserir na tabela tendo em vez do gatilho da estrutura de dados da entidade


Usando o Entity Framework 4.1, a solução postada por Ladislav para adicionar um Select de Scope_Identity() ao final do corpo do gatilho resolveu o problema para mim. Copiei toda a criação do gatilho aqui para completar. Com essa definição de gatilho, consegui adicionar linhas à tabela 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 manipular valores calculados (Obrigado a Chris Morgan nos comentários):

Se você tiver quaisquer outros valores calculados na tabela, terá que incluí-los no SELECT também. Por exemplo, se você tivesse um CreatedDate coluna que usa GETDATE() você faria o select assim:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();