Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

errore durante l'inserimento nella tabella che ha invece di trigger dal framework dei dati di entità

Utilizzando Entity Framework 4.1, la soluzione pubblicata da Ladislav per aggiungere un Select of Scope_Identity() alla fine del corpo del trigger ha risolto il problema per me. Ho copiato l'intera creazione del trigger qui per completezza. Con questa definizione di trigger sono stato in grado di aggiungere righe alla tabella utilizzando 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

Modifica per la gestione dei valori calcolati (Grazie a Chris Morgan nei commenti):

Se nella tabella sono presenti altri valori calcolati, dovrai includerli anche in SELECT. Ad esempio, se avevi un CreatedDate colonna che utilizza GETDATE() faresti la selezione in questo modo:

SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();