存储更新、插入或删除语句影响了意外的 > 行数 (0)
Posted
技术标签:
【中文标题】存储更新、插入或删除语句影响了意外的 > 行数 (0)【英文标题】:Store update, insert, or delete statement affected an unexpected > number of rows (0) 【发布时间】: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 阅读了有关异常的一些详细信息,经过一些研究,我在*** 上发现了similar 问题。但是在尝试解决方案时,我读到 DbContext 没有 Refresh() 方法,所以我尝试了:
var ctx = ((IObjectContextAdapter)db).ObjectContext;
ctx.Refresh();
但我仍然遇到同样的异常。然后我读到here,只有当您使用代码优先方法时,这种解决方法才能工作,我使用的是“数据库方法中的 EF 设计器”。如何在数据优先方法中访问 Refresh 方法?
【问题讨论】:
一段时间你可以评论一下触发器然后试试,现在抛出什么异常。因为 EF 可能不允许同时进行其他更改 如果我注释掉触发器然后服务运行顺利并且没有抛出异常。 【参考方案1】:尝试在您的触发器中添加这行 SQL 代码AFTER插入:
select g_id from [groupLocation] where @@ROWCOUNT > 0 and g_id = scope_identity();
我假设g_id
是您的身份列,如果不是,请将上述语句中出现的g_id
都替换为身份列。
另请阅读这个 SO 问题 - Error when inserting into table having instead of trigger from entity data framework
【讨论】:
以上是关于存储更新、插入或删除语句影响了意外的 > 行数 (0)的主要内容,如果未能解决你的问题,请参考以下文章
我收到存储更新、插入或删除语句影响了意外的行数 (0) 错误