首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么DbContext.SaveChangesAsync会抛出“子查询返回的值大于1”的错误?

为什么DbContext.SaveChangesAsync会抛出“子查询返回的值大于1”的错误?
EN

Stack Overflow用户
提问于 2018-06-01 05:20:20
回答 1查看 361关注 0票数 0

标题中的错误目前仅在我的QA环境中出现,而不是在我的DEV环境中。我已经将我的本地机器指向QA环境,运行了一个SQL跟踪,并且可以1)重现错误,2)查看生成的实际SQL代码。

我不明白的是,像这样的地狱错误怎么可能发生在更新中呢?下面是我的代码:

代码语言:javascript
复制
            var investigation = await (
                        from  ti in DbContext.Investigation
                        where ti.Id == model.InvestigationId
                        select ti
                    ).SingleAsync();

            investigation.QueueId = model.QueueId;

            var result = await DbContext.SaveChangesAsync();

            return result;

我最初认为第一行(查询)返回了多个结果,这是有意义的。但是,错误发生在var result = await DbContext.SaveChangesAsync();行上。有人能给我指出解决这个问题的正确方向吗?由SQL Server事件探查器提取的我的SQL查询:

代码语言:javascript
复制
exec sp_executesql N'SET NOCOUNT ON;
UPDATE [Investigation] SET [QueueId] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;

',N'@p1 bigint,@p0 smallint',@p1=7863,@p0=4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 06:02:57

如错误消息所示,此问题代码中没有子查询:

代码语言:javascript
复制
exec sp_executesql N'SET NOCOUNT ON;
UPDATE [Investigation] SET [QueueId] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;
',N'@p1 bigint,@p0 smallint',@p1=7863,@p0=4

因此,错误必须出现在由UPDATE语句触发的触发器代码中。

我从您的注释中看到,无关的INSERT语句无意中包含在触发器代码中。这些症状的一个更常见的原因是触发器的编码不正确,预期只有一行会受到影响。触发器每条语句触发一次,而不是每行触发一次,因此触发器代码处理多行的可能性非常重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50632950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档