2013-06-12 117 views
1

我们有一个已经存在的控制台应用程序,它目前使用基于文件的AppSettings。c#初始化数据库中的Appsettings

所以我的app.config点到我的实际的AppSettings文件:

<appSettings configSource="Configs\StaticAppSettings.config"/> 

而且在整个代码中,我们访问的是如此构造:

var value = ConfigurationManager.AppSettings["SomeKeyName"]; 

展望未来,我们希望到的appSettings在数据库中。因此,如果我们想保持相同的代码库,并且只是修改我们初始化appsettings的方式,那会是正确的方法吗?

我们打算做这样的事情作为的appSettings的初始化:

ConfigurationManager.AppSettings["SomeKeyName"] = "SomeValue"; 
ConfigurationManager.AppSettings["SomeKeyName2"] = "SomeValue2"; 

基本上只是创建键使用相同的密钥名称,文件有当前,但关键和价值来自数据库,而不是文件。

这样我们的代码库仍然保持不变,所有appSettings现在都是从数据库而不是文件初始化的。

这是一种正确的方法,还是它提出了一些警告/问题,或者是否有另一种更好的方法来从数据库中读取而无需到处更改代码?

回答

3

由于我没有收到任何答案,最后我做一个POC来证明我的观点,以下是经过从DB中的AppSettings和更新设置的代码段:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

IDictionary<string, string> staticAppSettings = ConfigService.GetStaticAppSettings(); // DB Call to get all settings from DB 

foreach (var setting in staticAppSettings) 
{ 
    if (ConfigurationManager.AppSettings[setting.Key] == null) 
    config.AppSettings.Settings.Add(setting.Key, setting.Value); 
    else 
    ConfigurationManager.AppSettings[setting.Key] = setting.Value; // Update existing 
} 

config.Save(); 
ConfigurationManager.RefreshSection("appSettings");