C# 如何重置EntityFramework.NET核心Web服务器的ConnectionString

C# 如何重置EntityFramework.NET核心Web服务器的ConnectionString,c#,sql-server,entity-framework-core,C#,Sql Server,Entity Framework Core,Docker的常见设置:两个linux容器,一个是使用EntityFramework Core 2.2.6的.NET核心Web服务器,另一个是MS SQLServer 2017。持久数据保存在Docker卷中。使用docker compose,它不是一个蜂群 启动SQLServer容器时,必须将SA密码作为环境变量提供给容器。但是,您可以在以后使用docker container inspect从容器外部读取此env。这显然会危及安全 这就引出了两个问题: (已讨论)有什么更好的方法向SQLSe

Docker的常见设置:两个linux容器,一个是使用EntityFramework Core 2.2.6的.NET核心Web服务器,另一个是MS SQLServer 2017。持久数据保存在Docker卷中。使用
docker compose
,它不是一个蜂群

启动SQLServer容器时,必须将SA密码作为环境变量提供给容器。但是,您可以在以后使用
docker container inspect
从容器外部读取此env。这显然会危及安全

这就引出了两个问题:

  • (已讨论)有什么更好的方法向SQLServer提供SA密码

  • Microsoft帮助说明,最好在启动容器后直接更改SA密码。当我在Web服务器代码中这样做时,EntityFramework已经与默认SA密码(我作为env提供的密码)连接。我可以很容易地更改密码。但是我如何告诉EntityFramework重置它的ConnectionString呢

  • 以下是我目前的代码:

    公共类启动
    {
    //此方法由运行时调用。请使用此方法将服务添加到容器中。
    public void配置服务(IServiceCollection服务)
    {
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddDbContext(选项=>
    {
    使用SQLServer(配置[“AppSettings:ConnectionString]”);
    });
    }
    //此方法由运行时调用。请使用此方法配置HTTP请求管道。
    公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
    {
    app.UseAuthentication();
    app.UseMvc();
    使用IServiceScope serviceScope=app
    .应用程序服务
    .GetRequiredService()
    .CreateScope();
    var context=serviceScope.ServiceProvider.GetService();
    var connection=context.Database.GetDbConnection();
    //尝试更改PW的connection.open()。如果失败,请使用默认PW。
    bool needToChangePW=CheckLoginPassword(连接);
    //迁移到(创建和)更新数据库
    Migrate();
    //迁移后更改PW(因为可能DB以前不存在)
    如果(需要更改PW)
    {
    connection.Open();
    context.Database.ExecuteSqlCommand(string.Format(“使用密码='{0}'更改SA登录名,SA_更改了_密码”);
    connection.Close();
    //在这里,我可以在配置中设置ConnectionString。
    //但是我怎样才能让EntityFramework实际使用这个更新的字符串?!
    配置[“AppSettings:ConnectionString”]=“使用新密码修改的字符串”;
    }
    }
    }
    
    试试这个

    _dbContext.Database.GetDbConnection().ConnectionString = "your updated connection string";
    
    就你而言:

    var context = serviceScope.ServiceProvider.GetService<API_DB_Context>();
     var connection = context.Database.GetDbConnection();
    connection.ConnectionString="modified string with new password";
    
    var context=serviceScope.ServiceProvider.GetService();
    var connection=context.Database.GetDbConnection();
    connection.ConnectionString=“使用新密码修改的字符串”;
    
    试试这个

    _dbContext.Database.GetDbConnection().ConnectionString = "your updated connection string";
    
    就你而言:

    var context = serviceScope.ServiceProvider.GetService<API_DB_Context>();
     var connection = context.Database.GetDbConnection();
    connection.ConnectionString="modified string with new password";
    
    var context=serviceScope.ServiceProvider.GetService();
    var connection=context.Database.GetDbConnection();
    connection.ConnectionString=“使用新密码修改的字符串”;
    
    您是否尝试过
    \u dbContext.Database.GetDbConnection().ConnectionString=“您更新的连接字符串”?您是否尝试过
    \u dbContext.Database.GetDbConnection().ConnectionString=“您更新的连接字符串”