sql >> Databáze >  >> RDS >> Sqlserver

chyba při vkládání do tabulky, která má místo spouštěče z rámce dat entity

Pomocí Entity Framework 4.1 mi problém vyřešilo řešení zveřejněné Ladislavem, které na konec těla spouštěče přidal Select of Scope_Identity(). Pro úplnost jsem zde zkopíroval celý výtvor spouště. S touto definicí spouštěče jsem byl schopen přidávat řádky do tabulky pomocí 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

Upravit pro zpracování vypočtených hodnot (Díky Chrisu Morganovi v komentářích):

Pokud máte v tabulce nějaké další vypočítané hodnoty, budete je muset také zahrnout do SELECT. Například pokud jste měli CreatedDate sloupec, který používá GETDATE() výběr byste provedli takto:

SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();


  1. Jak zavolám uloženou proceduru s argumenty pomocí sqlcmd.exe?

  2. Koncepce návrhu databáze s SQL Server Management Studio (SSMS) část 1

  3. Výstup skriptu SQL Developer zkrátí šířku sys_refcursor

  4. Operátoři SQL