如何在Net6 program.cs中设置多个连接字符串?我想使用Development、暂存和生产环境,它们都指向不同的数据库服务器。
NET 6. Program.cs:
builder.Services.AddDbContext<MyContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});提前谢谢。
发布于 2021-12-29 18:52:10
这是你能做的。
首先,创建一个像这样的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中删除它。您可以使用这种方法映射任何appsettings.json结构。
然后,您可以访问您的配置对象在您的应用程序中的任何地方做Program.WillAppConfig。
发布于 2022-03-01 06:42:29
在appsetting.json中创建具有不同名称的多个连接字符串:
builder.Services.AddDbContext<MyContext>(options => {
options.UseSqlServer(builder.Configuration.GetConnectionString(UseNameofConnectionString));
});还可以创建扩展方法,在调用它时为您提供所需的connectionString。
https://stackoverflow.com/questions/70523442
复制相似问题