我正在创建WCF restful Services,当我尝试通过实体框架将记录添加到我的数据库中时,我得到了这个例外:
存储更新,插入或删除语句会影响意外 行数(0)。自那以后,实体可能已被修改或删除 实体已加载。
我在我的数据库中创建了一个触发器:
GO
CREATE TRIGGER [dbo].[Trigger_groupLocation_date]
ON [dbo].[groupLocation]
INSTEAD OF INSERT
AS
BEGIN
SET NoCount ON
DECLARE @s int
DECLARE @g_id int
DECLARE @lat float
DECLARE @lon float
SELECT @s = sender FROM inserted
SELECT @g_id = g_id FROM inserted
SELECT @lat = latitude FROM inserted
SELECT @lon = longitude FROM inserted
insert into [groupLocation] (sender,g_id,latitude,longitude) values(@s,@g_id,@lat,@lon)
END
需要注意的一点是,我可以将记录直接添加到数据库中。我从here读了一些关于异常的细节,经过一些研究后,我在stackoverflow上发现了一个similar问题。但在尝试解决方案时,我读到DbContext没有Refresh()方法,所以我尝试了:
var ctx = ((IObjectContextAdapter)db).ObjectContext;
ctx.Refresh();
但我仍然得到同样的例外。然后我阅读here,只有当你使用代码优先方法然后这个工作可以工作,我使用“EF设计师从数据库方法”。如何在数据优先方法中访问Refresh方法?
答案 0 :(得分:3)
尝试在触发器 AFTER 插入内添加此行SQL代码:
select g_id from [groupLocation] where @@ROWCOUNT > 0 and g_id = scope_identity();
我认为g_id
是您的标识列,如果没有将上述语句中g_id
的出现替换为标识列。
另请阅读此问题 - Error when inserting into table having instead of trigger from entity data framework