You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5升级至.NET 6后出现Sequence contains more than one matching element错误

.NET 5升级到.NET 6后EF Core查询触发ThrowMoreThanOneMatchException错误解决方案

问题描述

将项目从.NET 5升级到.NET 6后,执行以下EF Core查询时触发ThrowMoreThanOneMatchException:

var result = _context.Set<Assessment>()
            .Count(a => a.Deleted == false);
return result;

错误调用栈如下:

at System.Linq.ThrowHelper.ThrowMoreThanOneMatchException()
at System.Linq.Enumerable.TryGetSingle[TSource](IEnumerable1 source, Func2 predicate, Boolean& found)
at System.Linq.Enumerable.Single[TSource](IEnumerable1 source, Func2 predicate)
at Microsoft.EntityFrameworkCore.Query.QueryableMethods..cctor()

重复执行该查询仍会触发相同错误。

原因分析

这个错误本质是EF Core在初始化QueryableMethods静态构造函数时,通过反射查找标准LINQ方法时发现多个匹配项,常见诱因包括:

  • EF Core版本与.NET 6运行时不兼容(如使用5.x版本EF Core搭配.NET 6)
  • 项目或依赖库中存在与系统LINQ同名同签名的自定义扩展方法
  • 程序集版本冲突(如同时加载不同版本的System.Linq相关程序集)

解决方案

1. 对齐EF Core与.NET版本

确保项目使用的EF Core版本为6.x系列(与.NET 6匹配):

  • 打开项目的.csproj文件,检查所有Microsoft.EntityFrameworkCore相关包的版本号,统一改为6.x(如6.0.25)
  • 执行dotnet restore重新还原依赖

2. 排查并移除冲突的LINQ扩展

  • 检查项目代码中是否存在自定义的Single、Count等LINQ扩展方法,若签名与系统LINQ方法完全一致,需重命名或删除这些自定义方法
  • 检查第三方依赖库,确认是否有库引入了冲突的LINQ扩展,必要时替换或移除该依赖

3. 清理程序集冲突

  • 删除项目的bin和obj目录,重新构建项目
  • 使用NuGet包管理器检查所有依赖的版本一致性,确保没有混合不同版本的相关程序集
  • 确认项目的RuntimeIdentifier配置与目标运行环境一致,避免跨平台运行时的加载冲突

4. 提前触发EF Core初始化

若错误是静态构造函数初始化失败导致的,可在程序启动时提前触发EF Core的初始化逻辑,例如在Program.cs中添加:

using var context = new YourDbContext();
// 执行简单查询触发EF Core初始化
context.Set<Assessment>().Any();

内容的提问来源于stack exchange,提问作者doc dakwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:01:02