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

ASP.NET Core 8中EF连接SQL Server报ConnectionString未初始化错误求助

问题排查与解决方案

核心问题分析

错误System.InvalidOperationException: the ConnectionString property has not been initialized的本质是EF Core无法正确获取数据库连接字符串,结合你的代码,主要问题集中在以下几点:

  • 自定义连接字符串工具类ConfigHelperDB可能未正确读取配置
  • DbContext的注册存在冗余冲突
  • 尝试操作的ExpenseDbContext与实际使用的MyDbContext不匹配,属于无效操作

具体修复步骤

1. 移除DbContext中冗余的配置逻辑

既然已经在Program.cs中通过依赖注入配置了DbContext,直接删除MyDbContext里的OnConfiguring方法,避免重复配置引发冲突:

public partial class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }

    // 移除整个OnConfiguring方法
    // protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    // {
    //     if (!optionsBuilder.IsConfigured)
    //     {
    //         optionsBuilder.UseSqlServer(ConfigHelperDB.GetConnectionString("DefaultConnection"),
    //         options => options.EnableRetryOnFailure());
    //     }
    // }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<CategoryMaster>(entity =>
             {
                 entity.HasKey(e => e.CategoryMasterId)
                       .HasName("PK_CategoryMaster_CategoryMasterId");

                 entity.Property(e => e.CreatedDate)
                       .HasDefaultValueSql("(getdate())");
             });

        OnModelCreatingPartial(modelBuilder);
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

2. 修正Program.cs中的DbContext注册

删除多余的AddScoped<DbContext, MyDbContext>注册,直接用框架自带的IConfiguration读取连接字符串,避免依赖自定义工具类:

// 直接通过builder.Configuration读取连接字符串,无需ConfigHelperDB
builder.Services.AddDbContextPool<MyDbContext>(
    options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"),
    options => options.EnableRetryOnFailure()));

// 删除这行冗余的注册
// builder.Services.AddScoped<DbContext, MyDbContext>();

3. 确保配置文件中的连接字符串正确

检查appsettings.json(或对应环境的配置文件)是否存在正确的DefaultConnection配置:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=你的服务器名;Database=你的数据库名;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}

4. 若必须使用ConfigHelperDB,确保其实现正确

如果一定要保留自定义工具类,需保证它能正确读取配置文件,示例实现如下:

public static class ConfigHelperDB
{
    public static string GetConnectionString(string name)
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

        return configuration.GetConnectionString(name);
    }
}

验证修复

完成以上步骤后重启应用,调用getCategory方法即可正常从数据库获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:42:41