Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fehler beim Einfügen in eine Tabelle, die anstelle eines Triggers aus dem Entity Data Framework vorhanden ist

Unter Verwendung von Entity Framework 4.1 löste die von Ladislav gepostete Lösung zum Hinzufügen eines Select of Scope_Identity() am Ende des Auslöserkörpers das Problem für mich. Ich habe der Vollständigkeit halber die gesamte Triggererstellung hierher kopiert. Mit dieser Trigger-Definition konnte ich mithilfe von context.SaveChanges() Zeilen zur Tabelle hinzufügen.

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

Bearbeiten für den Umgang mit berechneten Werten (Dank an Chris Morgan in den Kommentaren):

Wenn Sie andere berechnete Werte in der Tabelle haben, müssen Sie diese ebenfalls in die SELECT-Anweisung aufnehmen. Zum Beispiel, wenn Sie ein CreatedDate hatten Spalte, die GETDATE() verwendet Sie würden die Auswahl wie folgt vornehmen:

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