将IdentityDbContext替换为DbContext后的数据迁移异常问题
问题原因
你的ApplicationDbContextFactory构造函数依赖IOptionsMonitor<DbConfig>,但设计时创建DbContext的场景下,ASP.NET Core不会自动初始化完整的依赖注入容器,无法解析这个依赖项,导致空引用异常,也就是你看到的"Object reference not set to an instance of an object"错误。虽然工厂最终能被调用创建上下文,但宿主服务初始化失败的报错会一直存在。
解决方案
修改ApplicationDbContextFactory,不要通过依赖注入获取配置,而是手动构建配置读取连接字符串:
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext> { public ApplicationDbContext CreateDbContext(string[] args) { // 定位到Api项目的配置文件路径 var apiProjectPath = Path.Combine(Directory.GetCurrentDirectory(), "../Project.Api"); var configuration = new ConfigurationBuilder() .SetBasePath(apiProjectPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // 可选:加载环境对应的配置文件 .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development"}.json", optional: true) .Build(); var connectionString = configuration.GetConnectionString("DefaultConnection"); var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); optionsBuilder.UseNpgsql(connectionString, b => b.MigrationsAssembly("Project.App")); return new ApplicationDbContext(optionsBuilder.Options); } }
额外注意点
- 移除工厂类中原有的依赖注入构造函数,保留无参实现(上述示例已满足)。
- 修正迁移命令的语法错误,末尾多余的英文句号需要删除:
Add-Migration initMigration -Context ApplicationDbContext -Project Project.App -StartupProject Project.Api
- 确保
Project.Api项目下的appsettings.json中存在正确的ConnectionStrings:DefaultConnection配置项。
内容的提问来源于stack exchange,提问作者smcg
相关产品推荐
相关产品推荐

