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
相关产品推荐
相关产品推荐

