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

ASP.NET Core MVC 6.0 LTS配置无法从secrets.json读取连接串迁移报错问题

问题原因

EF Core 的包管理器控制台(PMC)迁移命令默认不会自动加载项目的用户机密(secrets.json),仅会读取 appsettings.json 中的配置,因此拿到的是空字符串,触发空值报错。
而通过 IIS Express 启动时,默认运行在开发环境,ASP.NET Core 会自动加载用户机密配置,所以可以正常读取连接串执行迁移。

解决方案

方案1:指定启动项目执行迁移(推荐,无需修改代码)

  • 首先确认PMC顶部的「默认项目」下拉框选中的是你的 ApplicationDbContext 所在的项目
  • 执行迁移命令时追加启动项目参数,示例如下:
Add-Migration 你的迁移名称 -StartupProject 你的Web项目名称

执行数据库更新命令同理:

Update-Database -StartupProject 你的Web项目名称

指定启动项目后,EF 工具会自动加载启动项目的完整配置,包括开发环境的用户机密。

方案2:添加设计时DbContext工厂(适合频繁执行迁移的场景)

在项目中添加如下设计时工厂类,EF 工具执行迁移时会自动调用该类创建上下文,自动加载用户机密:

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

namespace 你的项目实际命名空间
{
    public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
    {
        public ApplicationDbContext CreateDbContext(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .AddUserSecrets<Program>() // 加载用户机密的核心配置
                .Build();

            var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
            var connectionString = configuration.GetConnectionString("DefaultConnection");
            optionsBuilder.UseSqlServer(connectionString);

            return new ApplicationDbContext(optionsBuilder.Options);
        }
    }
}

添加完成后直接执行 Add-Migration 等命令即可,无需追加额外参数。

方案3:临时写入开发环境配置文件(不推荐)

如果仅需要临时执行一次迁移,可将连接串写入 appsettings.Development.json 文件,需注意务必将该文件加入 .gitignore 避免敏感配置提交到代码仓库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:18:04