You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8控制台应用使用用户机密生成DB上下文报错求助

问题分析与解决

你遇到的问题核心是:.NET 8控制台应用默认不会自动加载用户机密及完整配置体系,而Scaffold-DbContext命令在使用命名连接字符串时,依赖IConfiguration来读取配置,这就是为什么报错说找不到指定名称的连接字符串。

下面给两种直接可行的解决方法:


方法一:直接使用完整连接字符串执行命令

跳过配置读取的问题,直接把连接字符串完整传入命令:

Scaffold-DbContext 'Server=OURSERVER;Database=OURDATABASE;Trusted_Connection=True;' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

这个方法最简单,适合快速生成模型。


方法二:配置控制台应用加载用户机密,使用命名连接字符串

如果坚持要使用用户机密中的配置,需要让控制台应用具备读取配置的能力:

  1. 安装必要NuGet包
    在Package Manager Console中执行:
Install-Package Microsoft.Extensions.Configuration.UserSecrets
Install-Package Microsoft.Extensions.Configuration.Json
  1. 添加配置文件并设置复制属性
    在项目根目录创建appsettings.json文件,内容如下:
{
  "TTConnectionString": {
    "ConnectionString": ""
  }
}

右键该文件 → 属性 → 设置“复制到输出目录”为“如果较新则复制”。

  1. 在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);
  1. 重新执行Scaffold-DbContext命令
    现在可以使用命名连接字符串的命令了:
Scaffold-DbContext 'Name=TTConnectionString:ConnectionString' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

补充说明

你之前的命令写法本身没问题,但因为控制台应用没有初始化IConfiguration,EF Core工具无法访问用户机密里的配置,所以才会报错。ASP.NET Core项目默认已经配置好了这套体系,所以不会有这个问题。

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:54:54