为什么在使用 SingleAsync 时会出现这个错误?

001*_*001 9 c# linq entity-framework asp.net-core

查找项目是否重复。预期:仅当找到多个项目时才会抛出异常。但我们在这里得到了一个不同的例外?

        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
        }
Run Code Online (Sandbox Code Playgroud)

[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.TaskResultAsyncEnumerable1.Enumerator.MoveNext(CancellationTokenCancellationToken) 在 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.AsyncIterator1.MoveNext(CancellationToken cancellingToken) 在 D:\a\1\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, Func2 编译查询,IDiagnosticsLogger`1 记录器,输入 contextType)

System.InvalidOperationException:源序列不包含任何元素。在 System.Linq.AsyncEnumerable.Single_[TSource](IAsyncEnumerable 1.Enumerator.MoveNext(CancellationTokenCancellationToken) 在 System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator 1.MoveNext(CancellationToken cancellingToken) 在 D:\a\1\s\Ix.NET \Source\System.Interactive.Async\AsyncIterator.cs:第 98 行,位于 Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor 2 编译查询,IDiagnosticsLogger`1 记录器,输入 contextType)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
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.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteSingletonAsyncQuery[TResult](QueryContext queryContext, Func

Ciu*_*rin 14

SingleAsyncSingleOrDefaultAsync.

SingleAsync -> 表示如果没有找到条目或找到多个条目,它将抛出

异步返回序列中满足指定条件的唯一元素,如果存在多个这样的元素,则抛出异常。

SingleOrDefaultAsync -> 表示如果找到两个或更多条目,它将抛出

异步返回序列中满足指定条件的唯一元素,如果不存在则返回默认值;如果多个元素满足条件,则此方法将引发异常。