Net 6 多个连接字符串

4

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

NET 6. Program.cs:

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

});

提前致谢。


3
你的意思是你想要同时在开发、暂存和生产环境中工作吗?如果不是,那么你只需要有不同的 appsettings 文件,在其中相应地定义 DefaultConnection 就行了。 - Felix
听起来这个问题是关于不同的配置文件而不是多个连接字符串。 - Wiktor Zychla
3个回答

2

以下是您可以采取的措施。

首先,创建一个如下所示的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;}
}

如果您不使用Kestrel,可以从appsettings.json中删除“Kestrel”部分。您可以使用此方法来映射任何appsettings.json结构。
然后,您可以通过Program.WillAppConfig在应用程序的任何地方访问配置对象。

3
您可以为每个环境使用不同的appsettings文件:例如appsettings.Development.json、appsettings.Staging.json等。这利用了对ASPNETCORE_ENVIRONMENT变量的内置支持。 - Cristian Rusanu

1
在 appsetting.json 中创建多个具有不同名称的连接字符串:
builder.Services.AddDbContext<MyContext>(options => {   
    options.UseSqlServer(builder.Configuration.GetConnectionString(UseNameofConnectionString));
});

您可以创建扩展方法,在调用时提供所需的connectionString。

0

您可以拥有多个具有相同DefaultConnection名称但在它们之间具有不同值的appsettings.json,例如appsettings.Development.jsonappsettings.Staging.jsonappsettings.DevLocal.jsonappsettings.Production.json等等。
然后,您可以在launchSettings.json中添加多个配置文件来配置它们,例如:

  "profiles": {
    "Core": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://localhost:7165;http://localhost:5206",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Local": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://localhost:7165;http://localhost:5206",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "DevLocal"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }

变量ASPNETCORE_ENVIRONMENT的值将从其相应的appsettings.ASPNETCORE_ENVIRONMENT.json配置中获取。默认情况下执行的配置文件将是您的项目名称。要执行新配置文件,您只需要将其重定向即可。以下是在cli中执行此操作的方法:

dotnet run --launch-profile "Local"

在这种情况下,所有的设置都将根据我们的Profile:Local配置从appsettings.DevLocal.json中获取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接