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

.NET Core5 EF Context用ConfigurationManager读appsettings.json连接串为空问询

根因说明
  1. System.Configuration.ConfigurationManager 是 .NET Framework 时代的遗留配置组件,默认仅支持读取 app.config/web.config 格式的配置文件,完全不识别.NET Core/.NET 5的appsettings.json。你读到的Count = 1是系统machine.config中内置的默认连接串,和你编写的appsettings.json没有任何关联。
  2. Startup中能正常读取是因为使用了.NET Core 全新的IConfiguration配置体系,该体系原生支持json、环境变量、命令行等多源配置加载。
解决方案

要支持EF迁移、直接new MyContext等脱离ASP.NET管道的场景,手动加载appsettings.json即可,步骤如下:

  1. 安装必要NuGet包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
Microsoft.EntityFrameworkCore.Design
  1. 修改MyContext.cs代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace My.Models
{
  public partial class MyContext : DbContext
  {
    private static readonly IConfiguration _configuration;

    // 静态构造函数,首次访问MyContext时自动加载配置
    static MyContext()
    {
        _configuration = new ConfigurationBuilder()
            // 配置文件根目录为当前程序运行目录
            .SetBasePath(Directory.GetCurrentDirectory())
            // 加载appsettings.json,可选追加环境专属配置文件
            .AddJsonFile("appsettings.json")
            .AddJsonFile("appsettings.Development.json", optional: true)
            .Build();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            string connStr = _configuration.GetConnectionString("MyContext");
            optionsBuilder.UseNpgsql(connStr);
        }
    }
  }
}
注意事项
  • 右键选中项目中的appsettings.json,在属性面板将「复制到输出目录」修改为「如果较新则复制」,否则运行时输出目录不存在该文件会读取失败。
  • 若MyContext定义在类库项目中,执行EF迁移时需要指定启动项目为包含appsettings.json的ASP.NET Core项目,或者将appsettings.json同步复制到类库项目并设置相同的复制属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:45:03