我很难在生产环境中设置连接字符串到Azure SQL数据库。
我正在尝试使用系统变量而不是json / xml文件。
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables("environment_variable_name");
var config = builder.Build();
Services.AddDbContext<AppDBContext>(options => options.UseSqlServer(config.GetConnectionString("environment_variable_name")));
但这似乎并没有从环境变量中获取价值。 知道我做错了吗?
调试时,我看到config变量填充了正确的键/值,但是,config.GetConnectionString似乎不起作用。
答案 0 :(得分:0)
如果连接字符串存储在名为environment_variable_name
的env变量中,那么您可以像这样获取它:
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables("");
var config = builder.Build();
Services.AddDbContext<AppDBContext>(options =>
options.UseSqlServer(config["environment_variable_name"]));
这里有两个问题:
GetConnectionString
会查找配置密钥ConnectionStrings:environment_variable_name
,而不是environment_variable_name
。因此,您必须将env变量名称更改为ConnectionStrings:environment_variable_name
或使用config["environment_variable_name"]
来获取值。 AddEnvironmentVariables
的第一个参数不是变量名,而是前缀。这意味着如果我有名为my_application
和my_connectionstring
的env变量,则以下代码将获取它们:
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables("my_");
var config = builder.Build();
var appname = config["application"];
var connstr = config["connectionstring];
这很有用,因为您不会使每个可能的环境变量都混乱,只过滤那些您知道将要使用的环境变量。但请注意,访问变量时会删除前缀。
在您的示例中,如果您有名为environment_variable_name
的env变量,并使用AddEnvironmentVariables("environment_variable_name");
,那么您可以使用config[""]
访问其值。