动态更新连接字符串 - MVC



我的要求是,在第一次加载应用程序时,我想从数据库中获取有关连接字符串的信息,下次使用新的连接字符串(从数据库获取(进行连接这在.net中可能吗?连接字符串写入web.config文件
每当 web.config 更改时,我是否需要重新启动 IIS?

我试过这个:

public ActionResult Index()
{
    UpdateSetting("test", "123");
    UpdateConnectionString("testcon", "12345");
    return View();
}
/// <summary>
/// Updates the setting.
/// </summary>
/// <param name="key">The key.</param>
/// <param name="value">The value.</param>
public void UpdateSetting(string key, string value)
{
    Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
    if (config.AppSettings.Settings[key] == null)
    {
        config.AppSettings.Settings.Add(key, value);
    }
    else
    {
        config.AppSettings.Settings[key].Value = value;
    }
    config.Save();
    ConfigurationManager.RefreshSection("appSettings");
}
/// <summary>
/// Updates the connection string.
/// </summary>
/// <param name="key">The key.</param>
/// <param name="value">The value.</param>
public void UpdateConnectionString(string key, string value)
{
    Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
    if (config.ConnectionStrings.ConnectionStrings[key] == null)
    {
        config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(key, value));
    }
    else
    {
        config.ConnectionStrings.ConnectionStrings[key].ConnectionString = value;
    }
    config.Save();
    ConfigurationManager.RefreshSection("connectionStrings");
}

此函数将添加新的连接字符串,但有没有其他方法使我不想重新启动应用程序?

应用程序设置是静态的,不应在运行时修改。我不知道为什么你必须将连接存储在配置文件中,这没有意义。尝试其他解决方案,在启动之前通过脚本更新设置,或者将设置存储在另一个设置中,或者每次都检索。

有多种选择可以实现此目的。

  1. 如果使用 DI,则可以将连接字符串工厂注册为单一实例,然后尝试在所需的任何位置获取连接字符串。它只会为应用程序获取一次。

  2. 更新 UpdateConnectionString 方法以将检索到的值缓存在某个静态变量中(不过,这不是一个好方法(,然后在检索值之前检查缓存。如果缓存不为 null,请使用其值。

最新更新