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

ASP.NET Core Web API未找到已注册System.Data.SqlClient数据提供程序报错

问题原因

该报错是EF6在.NET Core 2.2环境下适配时,SqlClient数据提供程序未正确注册、版本依赖冲突共同导致的,现有操作存在注册时机错误、配置格式不兼容的问题,可按以下步骤修复:

修复步骤

  • 第一步:安装匹配版本的NuGet依赖包
    卸载所有不兼容的包后,安装以下两个稳定版包:

    • EntityFramework.SqlServer:版本必须和你使用的EF6 6.0.0完全对齐
    • System.Data.SqlClient:选择4.6.1版本,适配.NET Core 2.2运行环境
      同时卸载不需要的Microsoft.EntityFrameworkCore.Tools 3.1.20包:你使用的是EF6而非EF Core,该包不仅无效还会触发版本冲突。
  • 第二步:调整SqlClient工厂注册位置
    之前将注册代码放在Startup的Configure方法中时机过晚,EF初始化时工厂还未完成注册,需要将注册逻辑移到Program.cs的Main方法最开头:

    public static void Main(string[] args)
    {
        // 优先注册SqlClient数据提供程序工厂
        DbProviderFactories.RegisterFactory("System.Data.SqlClient", System.Data.SqlClient.SqlClientFactory.Instance);
        CreateWebHostBuilder(args).Build().Run();
    }
    
  • 第三步:删除无效配置
    删掉你在appsettings.json中添加的entityFramework节点配置,该配置是.NET Framework下web.config的配置规则,EF6在.NET Core环境下不会读取该配置,多余配置反而可能干扰运行。

  • 第四步:强制加载EF6 SqlServer提供程序(可选,仅前面步骤执行后仍报错时添加)
    在自定义DbContext的静态构造函数中添加逻辑,强制加载SqlServer提供程序避免编译时被优化移除:

    public class YourCustomDbContext : DbContext
    {
        static YourCustomDbContext()
        {
            // 强制引用SqlProviderServices,避免程序集被裁剪
            var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
    
        public YourCustomDbContext(string connectionString) : base(connectionString)
        {
        }
    
        // 其余DbSet定义保持不变
    }
    
  • 第五步:清理缓存重启项目
    执行完上述操作后,删除项目根目录下的bin、obj文件夹,再重新编译运行即可。

内容的提问来源于stack exchange,提问作者Hanieh Kiaee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:03