我有一个代码库,使用EF Core和Dapper来执行对数据库的操作。
我想建立一个新的网站副本以开发一些功能,并希望此站点连接到一个新的隔离数据库副本(dbConnectionDEBUG)。
目前,我使用以下设置:
startup.cs
这会自动根据
附加信息:我的应用程序正在运行在Azure应用程序服务中。
更新(3)-任务完成
只是为了完成这个问题(以防有人需要知道),我采用了@Nkosi的建议,有以下配置:
连接字符串 - 我有一个连接字符串ID/name
App Settings
我有一个默认的appSettings.json,其中包含一个查看实时数据库的
在我的Program.cs文件中,我有:
目前,我使用以下设置:
startup.cs
...
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("dbConnectionMain")));
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
...
我有一个ConnectionStrings
类,它通过DI在启动时被正确地填充:
public class ConnectionStrings
{
public string dbConnectionMain { get; set; }
public string dbConnectionDEBUG { get; set; }
public ConnectionStrings()
{
this.dbConnectionMain = "";
this.dbConnectionDEBUG = "";
}
}
然后,我可以在控制器/服务中访问 ConnectionStrings
,99% 的时间都是用以下方式进行数据库调用:
using (var conn = new SqlConnection(_connectionStrings.dbConnectionMain))
{
conn.Open();
...
如果我想要切换到“DEBUG”数据库,这将导致很多代码更改。
我该如何在我的代码中轻松地在连接字符串之间切换,取决于我正在处理哪个系统版本。如果我可以动态地做到这一点,那就太好了。明显的决定因素将是站点正在运行的URL。
或者,(作为单个更改)我只需在源头手动更改连接字符串(例如keystore / appsettings)。但我不喜欢这样做,因为它留下了人为错误的余地。
更新(2)
基于@Nkosi提到的内容,我正在追求这条路:
- 使用一个连接字符串“Id”(即
dbConnection
) - 根据应用程序在运行/部署的环境来区分连接字符串的value
我还有一个问题:
如果我有以下内容...
"MYAPPNAME": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:12345/;https://myapptestdomain.com/"
}
并且:
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
IHostingEnvironment env = context.HostingEnvironment;
config.AddJsonFile($"appsettings.{env.EnvironmentName.ToLower()}.json", optional: true);
})
.UseStartup<Startup>();
这会自动根据
applicationUrl
的值检测我的网站是否处于开发模式,还是我需要在我部署应用程序的服务器上手动添加值为Development
的ASPNETCORE_ENVIRONMENT
吗?附加信息:我的应用程序正在运行在Azure应用程序服务中。
更新(3)-任务完成
只是为了完成这个问题(以防有人需要知道),我采用了@Nkosi的建议,有以下配置:
连接字符串 - 我有一个连接字符串ID/name
dbConnection
,它在所有appSettings中使用(见下文)App Settings
我有一个默认的appSettings.json,其中包含一个查看实时数据库的
dbConnection
我有一个额外的appSettings.Playground.json文件,其中包含一个查看测试数据库的dbConnection
Azure - 应用程序服务 - 在我的playground开发槽上,我添加了一个ASPNETCORE_ENVIRONMENT的应用程序设置,其值为“Playground”在我的Program.cs文件中,我有:
config.AddJsonFile($"appsettings.json", optional: true,reloadOnChange: true);
和
config.AddJsonFile($"appsettings.{env.EnvironmentName.ToLower()}.json", optional: true,reloadOnChange: true);
请注意,我还在Azure上初始化Vault,该Vault存储所有基于Azure的应用程序的密钥和密码。本地使用用户秘密。
ASPNETCORE_ENVIRONMENT
添加为Development
到我的Azure应用程序配置中? - scgough