2013-06-12 168 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");