【发布时间】:2016-06-12 07:28:55
【问题描述】:
我正在创建 WCF restful 服务,当我尝试通过实体框架将记录添加到我的数据库中时,我得到了这个异常:
存储更新、插入或删除语句影响了意外 行数 (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 方法?
【问题讨论】:
-
一段时间你可以评论一下触发器然后试试,现在抛出什么异常。因为 EF 可能不允许同时进行其他更改
-
如果我注释掉触发器然后服务运行顺利并且没有抛出异常。
标签: sql asp.net sql-server entity-framework triggers