Entity Framework 4.1を使用して、トリガー本体の最後にSelect of Scope_Identity()を追加するためにLadislavによって投稿されたソリューションは、私にとって問題を解決しました。完全を期すために、トリガーの作成全体をここにコピーしました。このトリガー定義により、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
計算値を処理するための編集 (コメントのChris Morganに感謝します):
テーブルに他の計算値がある場合は、それらもSELECTに含める必要があります。たとえば、CreatedDate
がある場合 GETDATE()
を使用する列 次のように選択します:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();