首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用SingleAsync时会出现此错误?

问为什么在使用SingleAsync时会出现此错误?
EN

Stack Overflow用户
提问于 2019-06-20 16:10:57
回答 1查看 15.9K关注 0票数 11

查找某一项是否重复。Expected:只有在找到多个项时才抛出异常。但我们在这里有不同的例外?

代码语言:javascript
复制
        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在迭代上下文类型‘.ApplicationDbContext’的查询结果时发生了异常。System.InvalidOperationException:源序列不包含任何元素。在System.Linq.AsyncEnumerable.Single_TSource in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Single.cs:line 136 at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.TaskResultAsyncEnumerable1.Enumerator.MoveNext(CancellationToken cancellationToken) at System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator2.MoveNextCore(CancellationToken cancellationToken( D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs:line 106 at System.Linq.AsyncEnumerable.AsyncIterator1.MoveNext(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\AsyncIterator.cs:line 98 at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken) System.InvalidOperationException:源序列不包含任何元素。在System.Linq.AsyncEnumerable.Single_TSource in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Single.cs:line 136at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.TaskResultAsyncEnumerable1.Enumerator.MoveNext(CancellationToken cancellationToken) at System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator2.MoveNextCore(CancellationToken cancellationToken)在D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs:line 106at System.Linq.AsyncEnumerable.AsyncIterator1.MoveNext(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\AsyncIterator.cs:line 98 at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 16:14:32

您混淆了SingleAsync和SingleOrDefaultAsync。

SingleAsync ->意味着如果没有找到任何条目或多个条目,它将引发

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

SingleOrDefaultAsync ->意味着如果找到两个或多个条目,它将抛出。

异步返回序列中满足指定条件的唯一元素,或者如果不存在这样的元素,则返回默认值;如果超过一个元素满足该条件,此方法将抛出异常。

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

https://stackoverflow.com/questions/56690033

复制
相关文章

相似问题

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