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

EF Core控制台应用数据库连接触发ArgumentNullException异常

问题原因

执行add-migration时抛出ArgumentNullException提示连接字符串为空,本质是EF Core设计时工具创建MyDbContext实例时,ConfigurationManager.AppSettings["DbConnectionString"]读取结果为null,具体触发逻辑:

  • EF Core迁移命令属于设计时操作,运行在独立的执行上下文,默认不会自动加载项目中的app.config配置,调用无参构造创建DbContext时,自然读不到配置节点里的连接字符串
  • 控制台项目如果未安装配置读取相关的NuGet包,或是app.config未设置为复制到输出目录,就算是程序正常运行时也可能出现读值为空的问题
修复步骤

1 补全基础依赖和配置属性

  • 先通过NuGet给项目安装必需的依赖包:
    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.EntityFrameworkCore.Design
    • System.Configuration.ConfigurationManager(控制台项目读取app.config的appSettings节点必须安装此包,缺失时ConfigurationManager无法正常读取配置内容)
  • 右键项目中的app.config文件打开属性面板,将「复制到输出目录」选项设置为如果较新则复制,保证编译后配置文件会生成到程序运行目录。

2 添加设计时DbContext工厂

这是解决EF Core迁移时读不到配置最稳妥的方案,实现IDesignTimeDbContextFactory接口专门给迁移等设计时场景提供DbContext实例,完全不影响程序运行时的原有逻辑。
在项目中新增如下类:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using System.Configuration;

public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
{
    public MyDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
        var connStr = ConfigurationManager.AppSettings["DbConnectionString"];
        optionsBuilder.UseSqlServer(connStr);
        return new MyDbContext(optionsBuilder.Options);
    }
}

添加完成后再执行add-migration命令,工具会优先通过这个工厂类创建DbContext,不会再触发无参构造中读不到配置的问题。

其他优化建议

你当前代码中public virtual DbSet<MyUsers> MyUser{ get; set; }的属性名是单数形式,和实体类型MyUsers不匹配,建议修改为MyUsers,避免后续出现表名映射错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:31:01