.NET Framework迁移.NET Core 6:无法读取appsettings.json连接字符串
解决.NET Framework到.NET Core 6迁移中连接字符串读取失败的问题
问题原因
原PayMyRentEntities类的无参构造函数使用EF6针对.NET Framework的语法base("name=PayMyRentEntities"),该逻辑默认从web.config读取连接字符串,但.NET Core 6使用appsettings.json作为配置文件,两者配置读取机制不兼容,导致无法找到指定连接字符串。
解决方案
1. 安装必要NuGet包
确保项目安装以下包:
EntityFramework(EF6核心包)Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json- (可选)
Microsoft.Data.SqlClient(替换旧的System.Data.SqlClient,提升兼容性)
2. 修改PayMyRentEntities类
添加支持传入连接字符串的构造函数,同时适配无参构造函数的配置读取逻辑:
public partial class PayMyRentEntities : DbContext { // 适配.NET Core的无参构造函数 public PayMyRentEntities() : base(GetConnectionString()) { } // 支持手动传入连接字符串的构造函数 public PayMyRentEntities(string connectionString) : base(connectionString) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public virtual DbSet<Category> Categories { get; set; } public virtual DbSet<Hospital> Hospitals { get; set; } public virtual DbSet<LookupType> LookupTypes { get; set; } public virtual DbSet<LookupValue> LookupValues { get; set; } // 从appsettings.json读取连接字符串的私有方法 private static string GetConnectionString() { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); return configuration.GetConnectionString("PayMyRentEntities"); } }
3. (推荐)用依赖注入管理DbContext
在Program.cs中配置依赖注入,将连接字符串注入到PayMyRentEntities:
var builder = WebApplication.CreateBuilder(args); // 读取appsettings.json中的连接字符串 var connectionString = builder.Configuration.GetConnectionString("PayMyRentEntities"); // 注册DbContext到依赖注入容器 builder.Services.AddScoped<PayMyRentEntities>(sp => new PayMyRentEntities(connectionString)); // 其他服务配置... var app = builder.Build(); // 中间件配置... app.Run();
4. 检查appsettings.json属性
右键appsettings.json文件 → 属性 → 设置“复制到输出目录”为如果较新则复制或始终复制,确保运行时能读取到配置文件。
5. (可选)更新SQL提供程序
将appsettings.json中连接字符串的provider=System.Data.SqlClient替换为provider=Microsoft.Data.SqlClient,并安装Microsoft.Data.SqlClient包,提升在.NET Core环境下的兼容性。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

