.NET 6控制台应用程序如何访问配置并获取DbContext的连接字符串

blo*_*s4t 3 console-application dbcontext entity-framework-core .net-6.0

我正在编写一个 .NET 6 控制台应用程序,下面有未完成的代码。我不知道如何从配置中获取连接字符串,以便将其传递给该options.UseSqlServer方法。

我更喜欢使用顶级报表模板。

另外,我应该hostBuilder.Build().Run();在这段代码的末尾调用吗?要不就hostBuilder.Build()?只是想知道有什么区别。

var hostBuilder = Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((context, builder) =>
    {
        builder.SetBasePath(Directory.GetCurrentDirectory());
    })
    .ConfigureServices((context, services) =>
    {
        services.AddDbContext<CompanyContext>(options => options.UseSqlServer("<connection string from config"));
    });
Run Code Online (Sandbox Code Playgroud)

Pan*_*vos 5

ASP.NET Core Web 应用程序实际上是启动 HTTP 服务器的控制台应用程序。两种情况下的 DI、日志记录、配置基础设施是相同的。您在ASP.NET Core 教程中看到的相同方法可以通过通用主机生成器在控制台应用程序中使用。

该配置可通过委托的HostBuilderContextConfigureServices参数获得:

.ConfigureServices((context, services) =>
{
    var cns=context.Configuration.GetConnectionString("MyConnection");
    services.AddDbContext<CompanyContext>(options.UseSqlServer(cns));
});
Run Code Online (Sandbox Code Playgroud)

.NET (Core) 6.0 中引入的类WebApplicationBuilder仍然在底层使用 Microsoft.Extensions.Hosting 中间件,但将ServicesConfiguration等公开Logging为属性,而不是像ConfigureServices启用顶级和最小 API 程序那样的方法。

  • [.NET 通用主机](https://learn.microsoft.com/en-us/dotnet/core/extensions/generic-host) 文档对此进行了解释。使用“Build()”,您可以创建主机实例及其所有服务和配置。使用“Run”,您可以启动任何托管服务和生命周期挂钩,这些挂钩将在应用程序终止时终止服务 (2认同)