如何让dotnet ef dbcontext scaffold使用secrets.json中的连接字符串?
可以实现用用户密钥中的连接字符串执行scaffold命令,核心是让EF Core加载ASP.NET Core的配置系统(包含用户密钥),具体操作如下:
前提确认:你的项目是ASP.NET Core项目(如果是类库项目,需要搭配一个ASP.NET Core启动项目),且已正确安装EF Core工具和对应数据库的Provider包(比如
Microsoft.EntityFrameworkCore.SqlServer)。正确设置用户密钥:
在项目目录下执行命令,确保连接字符串完整且格式正确:dotnet user-secrets set "ConnectionStrings:MyConnectionString" "Server=MyServerName;Database=MyDBName;User Id=sa;Password=abc123;"执行
dotnet user-secrets list验证,确认输出为ConnectionStrings:MyConnectionString = Server=MyServerName;Database=MyDBName;User Id=sa;Password=abc123;。执行scaffold命令:
如果是直接在ASP.NET Core Web项目目录下操作:
dotnet ef dbcontext scaffold name=ConnectionStrings:MyConnectionString Microsoft.EntityFrameworkCore.SqlServer --output-dir Models这里
name=ConnectionStrings:MyConnectionString对应用户密钥中的配置项,Microsoft.EntityFrameworkCore.SqlServer是数据库提供者(根据你的数据库替换,比如MySQL用Pomelo.EntityFrameworkCore.MySql),--output-dir Models指定生成类的目录。如果你的数据访问层是类库项目:
需要指定项目和启动项目,让EF Core加载启动项目的配置系统:dotnet ef dbcontext scaffold name=ConnectionStrings:MyConnectionString Microsoft.EntityFrameworkCore.SqlServer --project YourDataLibrary --startup-project YourWebProject --output-dir Models
原理说明:
你之前的命令失败,是因为单独运行dotnet ef dbcontext scaffold时,EF Core默认不会初始化ASP.NET Core的IConfiguration体系,自然无法读取用户密钥。通过指定启动项目(或直接在Web项目下运行),EF会复用启动项目的配置加载逻辑,包括读取用户密钥中的连接字符串。
内容的提问来源于stack exchange,提问作者NibblyPig

