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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:45:38