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

如何让EF Core 6不再读取appsettings.json,使用指定连接字符串?

问题解决:EF Core 误读 AppInsights 连接字符串的处理

问题原因

你的代码已明确通过 UseSqlServer(DatabaseConnectionString) 指定连接字符串,但仍出现读取 AppInsights 下 ConnectionString 的情况,大概率是以下原因之一:

  • DbContext 的 OnConfiguring 方法中重新调用了 UseSqlServer 且未指定连接字符串(EF Core 会自动尝试从配置中查找匹配项);
  • 获取 ihcSqlDatabaseConnectionString 时出错(如配置键名错误、值为空),导致 UseSqlServer 自动 fallback 读取配置;
  • AddServices() 方法内部存在重复配置 ProxyServiceDbContext 的逻辑,覆盖了你后续指定的连接字符串。

解决方案

1. 检查并修正 DbContext 的 OnConfiguring 方法

打开 ProxyServiceDbContext 类,查看是否存在类似错误代码:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    // 错误示例:未指定连接字符串,EF Core 会自动查找配置中的 ConnectionString
    optionsBuilder.UseSqlServer();
    // 或错误读取了 AppInsights 的连接字符串
    optionsBuilder.UseSqlServer(_configuration["AppInsights:ConnectionString"]);
}

修正方式:

  • 若不需要在 OnConfiguring 中配置,直接删除该方法;
  • 若必须保留,仅在未配置时处理,并使用明确的连接字符串:
public class ProxyServiceDbContext : DbContext
{
    private readonly string _connectionString;

    // 通过构造函数注入连接字符串(推荐方式)
    public ProxyServiceDbContext(DbContextOptions<ProxyServiceDbContext> options, string connectionString) 
        : base(options)
    {
        _connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            // 使用注入的连接字符串,而非自动读取配置
            optionsBuilder.UseSqlServer(_connectionString);
        }
    }
}

2. 验证指定的连接字符串有效性

在代码中添加调试输出,确认 DatabaseConnectionString 的值正确:

string DatabaseConnectionString = string.Concat(ihcSqlDatabaseConnectionString, ";persist security info = True;MultipleActiveResultSets=True;App=EntityFramework;");
// 添加调试输出
Console.WriteLine($"当前使用的数据库连接字符串:{DatabaseConnectionString}");

如果输出为空或格式错误,检查 Settings:IhcSqlDatabaseConnectionString 在 appsettings.json 中的配置是否正确。

3. 排查 AddServices() 方法的重复配置

检查 AddServices() 内部是否调用了 AddDbContext<ProxyServiceDbContext>,如果存在,将你的 AddDbContext 调用放在 AddServices() 之后,或移除 AddServices() 中的重复配置,确保最终生效的是你指定的连接字符串。

4. 确认配置加载逻辑正确

添加调试输出验证配置加载结果,确保没有读取错误的配置项:

_config = configurationFile.Build();
// 输出 Settings 下的连接字符串
Console.WriteLine($"读取到的初始连接字符串:{_config.GetSection("Settings")["IhcSqlDatabaseConnectionString"]}");

内容的提问来源于stack exchange,提问作者Arun Prakash Nagendran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:42:09