如何在.NET Core控制台应用中为EF Scaffolding使用命名连接字符串管理密钥
.NET Core控制台应用使用命名连接字符串执行EF Scaffold命令的解决方案
前置准备
先给控制台项目安装必要的NuGet包:
- 对应数据库的EF Core驱动(比如SQL Server用
Microsoft.EntityFrameworkCore.SqlServer,PostgreSQL用Npgsql.EntityFrameworkCore.PostgreSQL) Microsoft.EntityFrameworkCore.DesignMicrosoft.Extensions.Configuration.Json
步骤1:配置appsettings.json
在项目根目录新建appsettings.json文件,内容参考如下:
{ "ConnectionStrings": { "ClientConnection": "你的实际数据库连接字符串" } }
右键点击appsettings.json → 选择【属性】→ 将【复制到输出目录】修改为如果较新则复制。
步骤2:添加设计时DbContext工厂
EF Core脚手架在控制台项目中默认不会自动读取配置,需要手动实现IDesignTimeDbContextFactory<T>接口,告知脚手架读取配置、创建DbContext实例的逻辑。
在项目中新建类文件ClientDbContextFactory.cs,示例代码如下(如果你的DbContext名称不同,替换泛型参数中的ClientDbContext即可):
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.Configuration; using System.IO; public class ClientDbContextFactory : IDesignTimeDbContextFactory<ClientDbContext> { public ClientDbContext CreateDbContext(string[] args) { // 读取本地配置文件 IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); // 构建DbContext配置 var optionsBuilder = new DbContextOptionsBuilder<ClientDbContext>(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("ClientConnection")); // 如果使用PostgreSQL则替换为: // optionsBuilder.UseNpgsql(configuration.GetConnectionString("ClientConnection")); return new ClientDbContext(optionsBuilder.Options); } }
步骤3:执行Scaffold命令
完成上述配置后,直接在NuGet包管理器控制台执行原格式命令即可,不需要明文填写连接串:Scaffold-DbContext Name=ConnectionStrings:ClientConnection Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
注意把命令中的数据库驱动、输出目录参数替换为你实际需要的配置即可。
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

