Met behulp van Entity Framework 4.1, loste de oplossing die door Ladislav werd gepost om een Select of Scope_Identity() toe te voegen aan het einde van de triggerbody, het probleem voor mij op. Voor de volledigheid heb ik de hele triggercreatie hier gekopieerd. Met deze triggerdefinitie kon ik rijen aan de tabel toevoegen met 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
Bewerken voor verwerking van berekende waarden (Met dank aan Chris Morgan in de reacties):
Als u nog andere berekende waarden in de tabel heeft, moet u deze ook in de SELECT opnemen. Als u bijvoorbeeld een CreatedDate
. had kolom die gebruikmaakt van GETDATE()
je zou de selectie als volgt maken:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();