Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

erreur lors de l'insertion dans la table ayant au lieu de déclencher à partir du cadre de données d'entité

En utilisant Entity Framework 4.1, la solution publiée par Ladislav pour ajouter un Select of Scope_Identity() à la fin du corps du déclencheur a résolu le problème pour moi. J'ai copié l'intégralité de la création du déclencheur ici pour être complet. Avec cette définition de déclencheur, j'ai pu ajouter des lignes à la table en utilisant 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

Modifier pour gérer les valeurs calculées (Merci à Chris Morgan dans les commentaires) :

Si vous avez d'autres valeurs calculées dans la table, vous devrez également les inclure dans le SELECT. Par exemple si vous aviez un CreatedDate colonne qui utilise GETDATE() vous feriez la sélection comme ceci :

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