sql >> Databasteknik >  >> RDS >> Sqlserver

fel när du infogar i tabellen med istället för trigger från entitetsdataramverket

Med hjälp av Entity Framework 4.1 löste lösningen som lades upp av Ladislav för att lägga till en Select of Scope_Identity() i slutet av triggerkroppen problemet för mig. Jag har kopierat hela triggerskapandet här för fullständighetens skull. Med denna utlösardefinition kunde jag lägga till rader i tabellen med hjälp av 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

Redigera för hantering av beräknade värden (Tack vare Chris Morgan i kommentarerna):

Om du har några andra beräknade värden i tabellen måste du också inkludera dem i SELECT. Till exempel om du hade ett CreatedDate kolumn som använder GETDATE() du skulle göra markeringen så här:

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


  1. Att lagra json, jsonb, hstore, xml, enum, ipaddr, etc misslyckas med kolumn x är av typen json men uttrycket är av typen som varierar

  2. PostgreSQL vs. MySQL:Vilket är bäst?

  3. Hantera opålitliga nätverk när du skapar en HA-lösning för MySQL eller MariaDB

  4. Inaktivera PostgreSQL-kontroller av främmande nyckel för migrering