Почему эта ошибка возникает при использовании SingleAsync? - PullRequest
0 голосов
/ 20 июня 2019

Найти, если предмет дублируется.Ожидаемое: исключение, которое выдается, только если найдено более одного элемента.но мы получаем другое исключение здесь?

        try
        {
            // Find duplicate item
            duplicateItem = await _context.Items
                .SingleAsync(m => m.UserId == userId && m.Name == "some item");
        }
        catch (Exception)
        {
    //Exception more than one item found
        }

[01:48:06 ERR] Исключение произошло при переборе результатов запроса для типа контекста '.... ApplicationDbContext'.System.InvalidOperationException: Исходная последовательность не содержит никаких элементов.в System.Linq.AsyncEnumerable.Single_ [TSource] (IAsyncEnumerable 1 source, CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Single.cs:line 136 at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.TaskResultAsyncEnumerable 1.Enumerator.MoveNext (CancellationToken cancellationToken) в System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator 2.MoveNextCore(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs:line 106 at System.Linq.AsyncEnumerable.AsyncIterator 1.MoveNokation\ s \ Ix.NET \ Source \ System.Interactive.Async \ AsyncIterator.cs: строка 98 в Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteSingletonAsyncQuery[TResult](QueryContext queryContext, Func 2 compiledQuery, IDiagnosticsLogger`1 logger 100) Тип регистратора, тип 100

System.InvalidOperationException: Исходная последовательность не содержит никаких элементов.в System.Linq.AsyncEnumerable.Single_ [TSource] (IAsyncEnumerable 1 source, CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Single.cs:line 136<br> at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.TaskResultAsyncEnumerable 1.Enumerator.MoveNext (CancellationToken cancellationToken) в System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator 2.MoveNextCore(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs:line 106<br> at System.Linq.AsyncEnumerable.AsyncIterator 1.MoveNokation\ s \ Ix.NET \ Source \ System.Interactive.Async \ AsyncIterator.cs: строка 98 в Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteSingletonAsyncQuery[TResult](QueryContext queryContext, Func 2 compiledQuery, IDiagnosticsLogger`1 logger Type1, регистратор типа 1), тип регистратора

1 Ответ

3 голосов
/ 20 июня 2019

Вы путаете SingleAsync с SingleOrDefaultAsync.

SingleAsync -> означает, что будет выброшено, если не найдено ни одной записи или более одной записи

Асинхронно возвращает единственный элемент последовательности, который удовлетворяет указанное условие, и выдает исключение, если более одного такого элемент существует.

SingleOrDefaultAsync -> означает, что будет выброшено, если найдены две или более записи

Асинхронно возвращает единственный элемент последовательности, который удовлетворяет указанное условие или значение по умолчанию, если такого элемента не существует; этот Метод генерирует исключение, если более чем один элемент удовлетворяет состояние.

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