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