Почему DbContext.SaveChangesAsync выдает ошибку «Подзапрос возвратил более 1 значения»? - PullRequest
0 голосов
/ 01 июня 2018

Ошибка в заголовке происходит только в моей среде QA прямо сейчас, а не в моей среде DEV.Я указал моей локальной машине на среду QA, запустил трассировку SQL и могу 1) воспроизвести ошибку и 2) увидеть фактический генерируемый код SQL.

Что я не понимаю, так это как вчёрт возьми, такая ошибка возможна даже при обновлении?Вот мой код:

            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-запрос, подобранный SQL Server Profiler:

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

1 Ответ

0 голосов
/ 01 июня 2018

В этом коде проблемы нет подзапроса, как следует из сообщения об ошибке:

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.

IПосмотрите из вашего комментария, что посторонние операторы INSERT были случайно включены в код триггера.Более распространенной причиной этих симптомов является то, что триггер неправильно закодирован, чтобы ожидать, что будет затронут только один ряд.Триггер срабатывает один раз для каждого оператора, а не для строки, поэтому важно, чтобы код триггера обрабатывал возможность нескольких строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...