.NET升级至6.0后EF Core通用查询方法执行失败
.NET 3.1升级到6.0(含EF Core同步升级)后Repository模式查询执行失败问题
将项目从.NET 3.1升级至6.0(同步升级EF Core)后,基于Repository和Unit of Work模式实现的查询代码出现执行失败问题。
报错的具体代码
public async Task<IEnumerable<T>> GetAsync(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, params Expression<Func<T, object>>[] includes) { IQueryable<T> query = dbSet; foreach (var include in includes) query = query.Include(include); if (filter != null) query = query.Where(filter); if (orderBy != null) query = orderBy(query); return await query.AsNoTracking().ToListAsync().ConfigureAwait(false); }
尝试过的无效写法
- 改写返回语句:
return await query.SingleOrDefaultAsync();
- 更换为另一种返回写法:
return await query.FirstOrDefaultAsync();
触发的错误信息
System.TypeInitializationException: “Microsoft.EntityFrameworkCore.EnumerableMethods”的类型初始值设定项引发异常。 ---> System.InvalidOperationException: 序列包含多个匹配元素 在 System.Linq.ThrowHelper.ThrowMoreThanOneMatchException() 在 System.Linq.Enumerable.TryGetSingle[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found) 在 System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate) 在 Microsoft.EntityFrameworkCore.EnumerableMethods..cctor() --- 内部异常堆栈跟踪的结尾 --- 在 Microsoft.EntityFrameworkCore.Query.Internal.AllAnyToContainsRewritingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) 在 Microsoft.EntityFrameworkCore.Query.QueryTranslationPreprocessor.Process(Expression query) 在 Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0() 在 Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func`1 compiler) 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken) 在 Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken) 在 Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1.GetAsyncEnumerator(CancellationToken cancellationToken) 在 System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.GetAsyncEnumerator() 在 Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken) 在 MYProject.DatabaseLayer.Repository.BaseRepository`1.GetAsync(Expression`1 filter, Func`2 orderBy, Expression`1[] includes) 位置 MyProject.DatabaseLayer\Repository\BaseRepository.cs:行号 50
内容的提问来源于stack exchange,提问作者DL Narasimhan
相关产品推荐
相关产品推荐

