2012-05-09 43 views
2

我試圖創建一個應用程序範圍內的設置表:使用NHibernate <map/>標記加載全局設置字典

Settings 

Name  | Value 
-------------------------- 
Config1 | "A text string" 
Config2 | "true" 
Config3 | "100" 

名稱和值都是VARCHAR類型。我想這在某種程度上在設置類映射到一個Dictionary對象:

public class ApplicationSettings 
{ 
    protected virtual void IDictionary Settings { get; set; } 

    public string Config1 { 
     get { return Settings["Config1"]; } 
     set { Settings["Config1"] = value; } 
    } 
    // etc 
} 

注:This prior question是我能找到我想要做的最接近的,但它並不顯示使用NHibernate映射。我知道NHibernate有一個< map/>標籤,這樣我就可以將這樣一個字典附加到另一個映射對象(例如映射到User類的UserSettings字典)。但在我的情況下,這些是全局設置,所以沒有父對象要附加。

任何人都可以解釋這種情況下的映射是什麼樣子的,或者如果< map/>標記無法使用,則可以使用其他方式(標準查詢,命名SQL查詢)來加載並保存此類型表?

回答

1
public class Setting 
{ 
    public virtual For Id { get; set; } 
    public string Value { get; set; } 
} 

public enum For 
{ 
    Config1, 
    Config2, 
} 


// initialize once 
void LoadSettings(ISession session) 
{ 
    Application.Settings = session.Query<Setting>().AsEnumerable().ToDictionary(s => s.Id, s => s.Value); 
} 

// get on demand with caching 
var config1 = session.Get<Setting>(For.Config1).Value;