.NET 8控制台应用使用用户机密生成DB上下文报错求助
问题分析与解决
你遇到的问题核心是:.NET 8控制台应用默认不会自动加载用户机密及完整配置体系,而Scaffold-DbContext命令在使用命名连接字符串时,依赖IConfiguration来读取配置,这就是为什么报错说找不到指定名称的连接字符串。
下面给两种直接可行的解决方法:
方法一:直接使用完整连接字符串执行命令
跳过配置读取的问题,直接把连接字符串完整传入命令:
Scaffold-DbContext 'Server=OURSERVER;Database=OURDATABASE;Trusted_Connection=True;' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
这个方法最简单,适合快速生成模型。
方法二:配置控制台应用加载用户机密,使用命名连接字符串
如果坚持要使用用户机密中的配置,需要让控制台应用具备读取配置的能力:
- 安装必要NuGet包
在Package Manager Console中执行:
Install-Package Microsoft.Extensions.Configuration.UserSecrets Install-Package Microsoft.Extensions.Configuration.Json
- 添加配置文件并设置复制属性
在项目根目录创建appsettings.json文件,内容如下:
{ "TTConnectionString": { "ConnectionString": "" } }
右键该文件 → 属性 → 设置“复制到输出目录”为“如果较新则复制”。
- 在Program.cs中配置IConfiguration
修改Program.cs,确保加载用户机密和配置文件:
using Microsoft.Extensions.Configuration; var configBuilder = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true) .AddUserSecrets<Program>(); IConfiguration config = configBuilder.Build(); // 可选:测试是否能读取到连接字符串 var connString = config["TTConnectionString:ConnectionString"]; Console.WriteLine(connString);
- 重新执行Scaffold-DbContext命令
现在可以使用命名连接字符串的命令了:
Scaffold-DbContext 'Name=TTConnectionString:ConnectionString' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
补充说明
你之前的命令写法本身没问题,但因为控制台应用没有初始化IConfiguration,EF Core工具无法访问用户机密里的配置,所以才会报错。ASP.NET Core项目默认已经配置好了这套体系,所以不会有这个问题。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

