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

EF Core 7:将连接字符串移出DbContext类时遇配置错误

解决EF Core中“No database provider has been configured for this DbContext”错误

你的问题核心出在服务注册的DbContext类型不匹配,同时无参构造函数存在可能导致手动实例化时的配置缺失,以下是具体解决步骤:

1. 修正Program.cs中的服务注册类型

你当前注册的是MyAppContext,但实际使用的DbContext类是ParaisoContext,这会导致DI容器无法正确提供配置好的实例,修改代码如下:

builder.Services.AddDbContext<ParaisoContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});

2. 移除无参构造函数(推荐)

DbContext中的无参构造函数会允许你手动new ParaisoContext(),但这种方式不会加载你在Program.cs中配置的数据库选项,直接删除这个构造函数,强制通过依赖注入获取实例:

// 删除这段无参构造函数代码
// public ParaisoContext()
// {
// }

如果确实需要保留无参构造,建议在内部补充配置逻辑(不推荐,会回到硬编码连接字符串的问题),或者确保所有使用DbContext的地方都通过DI注入。

3. 验证连接字符串格式

确认appsettings.json中的DefaultConnection格式符合SQL Server要求,示例格式:

"ConnectionStrings": {
  "DefaultConnection": "Server=你的服务器地址;Database=数据库名称;Trusted_Connection=True;TrustServerCertificate=True;"
}

4. 确保通过依赖注入获取DbContext

在控制器或服务中,必须通过构造函数注入ParaisoContext,禁止手动实例化:

public class RentalService
{
    private readonly ParaisoContext _dbContext;

    public RentalService(ParaisoContext dbContext)
    {
        _dbContext = dbContext;
    }

    // 业务逻辑示例
    public List<Rentals> GetAllRentals()
    {
        return _dbContext.Rentals.ToList();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:52:33