Найдите, если элемент дублируется. Ожидается: исключение будет выдано только в том случае, если будет найдено более одного элемента. но здесь мы получаем другое исключение?
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] An exception occurred while iterating over the results of a query for context type '....ApplicationDbContext'. System.InvalidOperationException: Source sequence doesn't contain any elements. at 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(CancellationToken cancellationToken) at System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator2.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 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) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteSingletonAsyncQuery[TResult](QueryContext queryContext, Func2 compiledQuery, IDiagnosticsLogger`1 logger, Type contextType)System.InvalidOperationException: Source sequence doesn't contain any elements. at System.Linq.AsyncEnumerable.Single_[TSource](IAsyncEnumerable
1 source, CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Single.cs:line 1361.Enumerator.MoveNext(CancellationToken cancellationToken) at System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.TaskResultAsyncEnumerable2.MoveNextCore(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs:line 1061.MoveNext(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\AsyncIterator.cs:line 98 at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor
at System.Linq.AsyncEnumerable.AsyncIterator1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteSingletonAsyncQuery[TResult](QueryContext queryContext, Func2 compiledQuery, IDiagnosticsLogger`1 logger, Type contextType)
Примечание: если вы хотите проверить, есть ли в коллекции дубликаты, это можно сделать без исключений. Просто .Where(<your condition>).Take(2).ToList(), а затем просто проверьте длину этого списка
@AleksAndreev Забавный факт: вызов Single в Entity Framework в любом случае делает Take(2)...
Вместо этого используйте SingleOrDefaultAsync, Single ожидает один и только один объект, который соответствует заданному вами условию (ровно один), а SingleOrDefault ожидает в большинстве один совпадающий объект (ноль или один).





Вы путаете SingleAsync с SingleOrDefaultAsync.
SingleAsync -> означает, что он будет сгенерирован, если не будет найдено ни одной записи или будет найдено более одной записи.
Asynchronously returns the only element of a sequence that satisfies a specified condition, and throws an exception if more than one such element exists.
SingleOrDefaultAsync -> означает, что будет выброшено, если будут найдены две или более записей
Asynchronously returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition.
Single[Async]выкинет, если есть ноль или несколько элементов, я не понимаю ваш вопрос здесь.