ASP.NET Core 10 Web API中EF Core上下文连接字符串为空求助
以下是针对你遇到的POA_CSMContext连接字符串注入异常问题的排查方向:
检查DbContext的服务注册逻辑
确认Program.cs中POA_CSMContext的注册代码是否正确读取配置:// 正确示例:使用配置文件中的指定连接字符串 builder.Services.AddDbContext<POA_CSMContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("POA_CSMConn")));重点核对连接字符串的名称(比如
POA_CSMConn)是否与appsettings.json中的键完全一致,避免拼写错误。确认FSMUserStore的注册方式
检查FSMUserStore是否通过容器依赖注入获取POA_CSMContext实例,而非手动创建。错误示例:// 错误:手动new DbContext会跳过配置注入 builder.Services.AddScoped<FSMUserStore>(_ => new FSMUserStore(new POA_CSMContext()));正确做法是让容器自动注入DbContext:
builder.Services.AddScoped<FSMUserStore>(); // 或显式指定参数由容器提供 builder.Services.AddScoped<FSMUserStore>(sp => new FSMUserStore(sp.GetRequiredService<POA_CSMContext>()));检查DbContext的构造函数实现
确保POA_CSMContext的构造函数正确接收DbContextOptions<POA_CSMContext>参数,且未硬编码连接字符串:public class POA_CSMContext : DbContext { // 正确构造函数:依赖注入配置选项 public POA_CSMContext(DbContextOptions<POA_CSMContext> options) : base(options) { } // 避免无参构造函数(除非有明确配置逻辑),否则容器可能优先使用无参构造导致配置丢失 // public POA_CSMContext() { } }验证配置文件与环境变量
确认当前运行环境对应的配置文件(如appsettings.Development.json)中存在正确的连接字符串,且未被环境变量覆盖。可以在LoginController中输出builder.Configuration.GetConnectionString("你的连接字符串名称"),对比FSMUserStore中_context.Database.GetConnectionString()的结果,判断是否是配置读取的问题。核对依赖注入生命周期
确保POA_CSMContext和FSMUserStore的生命周期一致(均为Scoped或Transient),避免因生命周期不匹配导致的实例异常。
内容的提问来源于stack exchange,提问作者Wallace B. McClure

