脚手架生成MySQL表后,如何用DI从appsettings.json取EF Core连接字符串
基于依赖注入实现EF Core上下文从appsettings.json获取连接字符串(模型独立类库场景)
步骤1:修改独立类库中的DbContext类
移除OnConfiguring方法里的硬编码配置逻辑,改用构造函数注入DbContextOptions:
public class YourDbContext : DbContext { // 通过构造函数接收DI注入的配置选项 public YourDbContext(DbContextOptions<YourDbContext> options) : base(options) { } // 声明你的实体集合(示例) // public DbSet<Product> Products { get; set; } }
如果需要兼容非DI场景(比如控制台程序直接使用),可以保留OnConfiguring但增加判断:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 仅当未通过DI配置时才执行本地配置 if (!optionsBuilder.IsConfigured) { IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); var connectionString = configuration.GetConnectionString("DefaultConnection"); optionsBuilder.UseSqlServer(connectionString); // MySQL请替换为UseMySql } }
步骤2:在主项目配置连接字符串
在主项目(如ASP.NET Core项目)的appsettings.json中添加连接字符串:
{ "ConnectionStrings": { "DefaultConnection": "Server=你的数据库地址;Database=目标库名;User Id=账号;Password=密码;TrustServerCertificate=True;" } }
步骤3:在主项目注册DbContext到DI容器
以.NET 6+的Program.cs为例,将DbContext注册到依赖注入容器,并从配置中读取连接字符串:
var builder = WebApplication.CreateBuilder(args); // 注册DbContext,从appsettings.json读取配置 builder.Services.AddDbContext<YourDbContext>(options => { var connStr = builder.Configuration.GetConnectionString("DefaultConnection"); // MySQL场景请替换为UseMySql,需提前安装Pomelo.EntityFrameworkCore.MySql包 options.UseSqlServer(connStr); }); // 其他服务注册、中间件配置... var app = builder.Build(); app.Run();
注意事项
- 独立类库需安装
Microsoft.EntityFrameworkCore,以及对应数据库的EF Core驱动包(MySQL用Pomelo.EntityFrameworkCore.MySql) - 主项目必须引用你的模型类库
- 确保主项目的
appsettings.json文件复制到输出目录(右键文件→属性→复制到输出目录:如果较新则复制)
内容的提问来源于stack exchange,提问作者user3777961
相关产品推荐
相关产品推荐

