Menggunakan Entity Framework 4.1, solusi yang diposting oleh Ladislav untuk menambahkan Select of Scope_Identity() ke akhir badan pemicu memecahkan masalah bagi saya. Saya telah menyalin seluruh pembuatan pemicu di sini untuk kelengkapan. Dengan definisi pemicu ini, saya dapat menambahkan baris ke tabel menggunakan 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
Edit untuk menangani nilai yang dihitung (Terima kasih kepada Chris Morgan di komentar):
Jika Anda memiliki nilai lain yang dihitung dalam tabel, Anda harus memasukkannya ke dalam SELECT juga. Misalnya jika Anda memiliki CreatedDate
kolom yang menggunakan GETDATE()
Anda akan membuat pilihan seperti ini:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();