动态更新连接字符串 - MVC

时间:2018-01-04 14:03:29

标签: c# asp.net-mvc connection-string

我的要求是,首次加载应用程序时,我想从数据库中获取有关连接字符串的信息,然后使用新连接字符串(从数据库中获取)进行下一次连接 这是可能的.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");
}

此函数将添加一个新的连接字符串,但是还有其他方法,以便我不想重新启动应用程序吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

有多种方法可以实现这一目标。

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

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