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

ASP.NET Core 7数据库提供程序错误解决:仅用appsettings连接字符串

问题原因

你的DB类保留了无参构造函数,当项目中某些地方通过无参方式创建DB实例(比如手动new DB()),或者依赖注入过程中意外触发无参构造时,由于你注释了OnConfiguring方法,此时没有任何数据库提供程序的配置,就会抛出"未为此DbContext配置数据库提供程序"的错误。

保留OnConfiguring时,即使调用无参构造,该方法会直接硬编码配置数据库,所以能正常运行,但这就导致了连接字符串重复配置的问题。

解决方案

1. 删除DbContext的无参构造函数

只保留带DbContextOptions<DB>参数的构造函数,确保依赖注入能正确传入配置好的选项:

public class DB : IdentityDbContext
{
    // 移除无参构造函数
    public DB(DbContextOptions<DB> options) : base(options)
    {
    }

    // 彻底注释或删除OnConfiguring方法
    // protected override void OnConfiguring(DbContextOptionsBuilder OptionsBuilder)
    // {
    //     OptionsBuilder.UseSqlServer(@"data source=DESKTOP-JU6B74d\SQL2019;initial catalog = Laser; integrated security = true;TrustServerCertificate=True;");
    //     base.OnConfiguring(OptionsBuilder);
    // }
}

2. 确保所有DbContext的使用都通过依赖注入

项目中任何需要使用DB的地方,都要通过构造函数注入的方式获取实例,禁止手动new DB():
比如控制器中注入:

public class HomeController : Controller
{
    private readonly DB _db;

    // 构造函数注入DbContext
    public HomeController(DB db)
    {
        _db = db;
    }

    // 业务方法中使用_db
}

3. 确认Program.cs的配置正确

你的现有配置已经正确读取appsettings.json的连接字符串,保持即可:

builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<DB>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("CON1")));

这样配置后,DbContext会完全从appsettings.json读取连接字符串,不会再出现重复配置或未配置的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:09:55