【问题标题】:Net 6 Multiple Connection StringsNet 6 多个连接字符串
【发布时间】:2021-12-29 18:24:42
【问题描述】:

如何在 Net 6 program.cs 中设置多个连接字符串? 我想使用开发、暂存和生产环境,它们都指向不同的数据库服务器。

NET 6.Program.cs:

builder.Services.AddDbContext<MyContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));

});

提前致谢。

【问题讨论】:

  • 您是说您“想同时使用开发、暂存和生产环境”吗?因为如果不是,您只有不同的 appsettings 文件,其中 DefaultConnection 被相应地定义
  • 听起来问题是关于不同的配置文件而不是多个连接字符串。

标签: c# asp.net-core-webapi connection-string .net-6.0


【解决方案1】:

这是你可以做的。

首先,像这样创建一个 appsettings.json:

appsettings.json

{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://*:5000"
      }
    }
  },
  "WillAppConfig": {
    "ActiveEnvironment": "Development",
    "DevDatabase": "server:123.123.123.123, user: will, pass:1234",
    "STGDatabase": "server:123.123.123.123, user: will, pass:1234",
    "ProdDatabase": "server:123.123.123.123, user: will, pass:1234"
  }
}

然后在项目的某处创建一个类,用于将配置映射到对象。

WillAppConfigurationMap.cs

public class WillAppConfigurationMap
{
    public string ActiveEnvironment { get; set; }
    public string DevDatabase { get; set; }
    public string STGDatabase { get; set; }
    public string ProdDatabase { get; set; }

}

最后在您的 Program.cs 中,您可以根据 ActiveEnvironment 的值选择要使用的连接字符串。

var builder = WebApplication.CreateBuilder(args);
WillAppConfig = builder.Configuration.GetSection("WillAppConfig").Get<WillAppConfigurationMap>();
var connectionString = "";
if (WillAppConfig.ActiveEnvironment == "Development")
{
     connectionString = WillAppConfig.DevDatabase
} 
else if (WillAppConfig.ActiveEnvironment == "Staging") 
{
    connectionString = WillAppConfig.STGDatabase
} 
else if (WillAppConfig.ActiveEnvironment == "Production") 
{
   connectionString = WillAppConfig.ProdDatabase
}

builder.Services.AddDbContext<MyContext>(options =>
{ 
    options.UseSqlServer(connectionString));
});
partial class Program
{
    public static WillAppConfigurationMap WillAppConfig { get; private set;}
}

如果您不使用它,您可以从 appsettings.json 中删除“Kestrel”部分。您可以使用这种方法来映射任何 appsettings.json 结构。

然后,您可以通过 Program.WillAppConfig 在应用中的任何位置访问您的配置对象。

【讨论】:

  • 您可以为每个环境使用不同的 appsettings 文件:appsettings.Development.json、appsettings.Staging.json 等。这利用了对 ASPNETCORE_ENVIRONMENT 变量的内置支持
【解决方案2】:

在 appsetting.json 中创建多个不同名称的连接字符串:

builder.Services.AddDbContext<MyContext>(options => {   
    options.UseSqlServer(builder.Configuration.GetConnectionString(UseNameofConnectionString));
});

您还可以创建扩展方法,在调用时为您提供所需的连接字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2012-06-04
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多