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

EF Core执行Add-Migration时报connectionString为空异常,求解决方案

解决Add-Migration时connectionString为null的ArgumentNullException问题

问题根源

当你执行PM> Add-Migration Initial时,EF Core的设计时工具会调用DbContext的无参构造函数,但你的无参构造函数并没有初始化connectionString字段,导致OnConfiguring方法里调用UseSqlServer(connectionString)时传入了null,触发了ArgumentNullException。

看你的代码:

public EFarmerDbModel() : base() { OnCreated(); }

这个构造函数完全没给connectionString赋值,而OnConfiguring里直接使用了这个未初始化的字段,自然会报错。另外,你在OnConfiguring里重复调用了UseSqlServer,这也是不必要的,会覆盖之前的配置逻辑。


解决方案

我们需要确保设计时工具能获取到有效的连接字符串,这里提供两种实用的修复方式:

方式1:通过配置文件加载连接字符串(推荐用于生产/正式项目)

如果你的类库项目有appsettings.json配置文件,可直接在OnConfiguring中读取配置:

  1. 先确保appsettings.json的属性设置为复制到输出目录(选择「始终复制」或「如果较新则复制」)
  2. 修改OnConfiguring方法:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    // 避免重复配置EF上下文
    if (!optionsBuilder.IsConfigured)
    {
        // 加载类库目录下的配置文件
        var configBuilder = new ConfigurationBuilder()
            .SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();
        
        var connectionString = configBuilder.GetConnectionString("EFarmerDbConnection");
        
        // 合并LazyLoading和SQL Server配置,指定迁移程序集
        optionsBuilder.UseLazyLoadingProxies()
                      .UseSqlServer(connectionString, x => x.MigrationsAssembly("EFarmerPkModelLibrary.Migrations"));
    }
    
    CustomizeConfiguration(ref optionsBuilder);
    base.OnConfiguring(optionsBuilder);
}
  1. 在appsettings.json中添加连接字符串:
{
  "ConnectionStrings": {
    "EFarmerDbConnection": "你的SQL Server完整连接字符串"
  }
}

方式2:在无参构造函数中直接初始化connectionString(仅适合测试场景)

如果只是临时测试,不想配置文件,可以直接在无参构造函数里硬编码连接字符串:

public EFarmerDbModel() : base() 
{
    // 直接赋值连接字符串
    connectionString = "Server=你的服务器名;Database=EFarmerDb;Trusted_Connection=True;TrustServerCertificate=True;";
    OnCreated(); 
}

⚠️ 注意:硬编码连接字符串会暴露敏感信息,不建议用于生产环境。


验证修复

修改完成后,重新执行迁移命令:

PM> Add-Migration Initial

现在应该能正常生成初始迁移文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:37:35