asp.net core 1.0用于生产环境的SQL Server连接字符串?

时间:2016-07-09 20:11:45

标签: asp.net

我很难在生产环境中设置连接字符串到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似乎不起作用。

1 个答案:

答案 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"]));

这里有两个问题:

  1. GetConnectionString会查找配置密钥ConnectionStrings:environment_variable_name,而不是environment_variable_name。因此,您必须将env变量名称更改为ConnectionStrings:environment_variable_name或使用config["environment_variable_name"]来获取值。
  2. AddEnvironmentVariables的第一个参数不是变量名,而是前缀。这意味着如果我有名为my_applicationmy_connectionstring的env变量,则以下代码将获取它们:

    var builder = new ConfigurationBuilder();
    builder.AddEnvironmentVariables("my_");
    var config = builder.Build();
    var appname = config["application"];
    var connstr = config["connectionstring];
    
  3. 这很有用,因为您不会使每个可能的环境变量都混乱,只过滤那些您知道将要使用的环境变量。但请注意,访问变量时会删除前缀。

    在您的示例中,如果您有名为environment_variable_name的env变量,并使用AddEnvironmentVariables("environment_variable_name");,那么您可以使用config[""]访问其值。