Sử dụng Entity Framework 4.1, giải pháp được Ladislav đăng để thêm Select of Scope_Identity () vào cuối phần thân trình kích hoạt đã giải quyết được vấn đề cho tôi. Tôi đã sao chép toàn bộ quá trình tạo trình kích hoạt ở đây cho hoàn chỉnh. Với khả năng loại bỏ trình kích hoạt này, tôi có thể thêm các hàng vào bảng bằng cách sử dụng 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
Chỉnh sửa để xử lý các giá trị được tính toán (Cảm ơn Chris Morgan trong phần bình luận):
Nếu bạn có bất kỳ giá trị được tính toán nào khác trong bảng, bạn cũng sẽ phải đưa chúng vào SELECT. Ví dụ:nếu bạn có CreatedDate
cột sử dụng GETDATE()
bạn sẽ thực hiện lựa chọn như thế này:
SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();