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

.NET 6控制台应用:读取配置获DbContext连接串及宿主构建疑问

.NET 6控制台应用:配置连接串与Host.Build()/Run()区别

一、从配置中获取数据库连接串

你可以通过ConfigureServices参数里的context.Configuration直接读取配置文件中的连接串,步骤如下:

  1. 在appsettings.json中配置连接串
    确保你的项目根目录下的appsettings.json包含ConnectionStrings节点:
{
  "ConnectionStrings": {
    "CompanyDb": "Server=.;Database=CompanyDB;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}
  1. 修改代码读取连接串
    在ConfigureServices中,通过context.Configuration.GetConnectionString("CompanyDb")获取配置值,替换硬编码的占位符:
var hostBuilder = Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((context, builder) =>
    {
        builder.SetBasePath(Directory.GetCurrentDirectory());
    })
    .ConfigureServices((context, services) =>
    {
        // 从配置读取连接串
        var connectionString = context.Configuration.GetConnectionString("CompanyDb");
        services.AddDbContext<CompanyContext>(options => options.UseSqlServer(connectionString));
    });

注:Host.CreateDefaultBuilder(args)已经默认加载了appsettings.json、环境变量等配置源,所以SetBasePath其实可以省略,除非你需要自定义配置文件路径。

二、hostBuilder.Build()与hostBuilder.Build().Run()的区别

  • 仅调用Build():
    只会构建IHost实例,不会启动主机的生命周期。适合一次性任务场景(比如初始化数据库、执行单次业务逻辑),构建后你可以手动从主机获取服务,完成任务后记得调用Dispose()释放资源:
using var host = hostBuilder.Build();
// 获取服务执行任务
var dbContext = host.Services.GetRequiredService<CompanyContext>();
// 执行逻辑...
  • 调用Build().Run():
    等价于先Build()构建主机,再调用RunAsync().GetAwaiter().GetResult(),会启动主机并阻塞当前线程直到主机关闭。适合长期运行的控制台应用(比如包含IHostedService后台服务的场景),它会触发主机的启动流程,包括调用所有IHostedService的StartAsync方法,直到收到停止信号(比如Ctrl+C)才会退出。

内容的提问来源于stack exchange,提问作者Tech with Thiru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:24:47