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

.NET 5.0 Web API中AddDbContext注册数据库上下文不生效问题

错误根因
  • 调用时机过早:SetGlobals方法的触发时间早于依赖注入容器的完整构建流程。你在ConfigureServices中编写的AddDbContext配置仅完成了服务注册,并没有完成实例初始化,只有等容器完全构建后,从容器中解析得到的MyDbContext实例才会自动绑定你配置的Sqlite数据库提供器。
  • 实例化方式错误:如果SetGlobals方法内直接通过new MyDbContext()的方式创建上下文实例,没有传入容器构建好的DbContextOptions<MyDbContext>参数,新建的实例就没有绑定任何数据库提供器,触发报错。
修复方案
  • 调整SetGlobals调用时机到容器构建完成后,推荐在Startup.Configure方法中通过参数注入拿到已配置好的MyDbContext实例,再传入SetGlobals使用:
// Startup.cs Configure方法示例
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyDbContext dbContext)
{
    // 此处拿到的dbContext已完成提供器配置
    SetGlobals(dbContext);
    // 剩余中间件配置逻辑
}
  • 若确实需要在ConfigureServices执行阶段调用SetGlobals,可临时构建服务提供者获取上下文实例:
// ConfigureServices方法内临时使用,不推荐频繁调用
var tempProvider = services.BuildServiceProvider();
var dbContext = tempProvider.GetRequiredService<MyDbContext>();
SetGlobals(dbContext);
  • 全面检查SetGlobals及其关联逻辑,确保不存在无参数手动创建MyDbContext实例的代码,所有上下文实例均从依赖注入容器获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:15:03