2

如何構建數據庫?我使用具有實體框架和代碼優先的存儲庫模式對模型進行編碼。存儲數據庫中網站的系統設置和配置?

例如:我想要一個管理員設置一個字符串附加到每個用戶名。

我在考慮具有以下列的鍵值表(設置)嗎? SettingsIdNameValue。通過這種方法,我需要手動進入,創建一個記錄名稱:AppendedToUsername,值:nil。然後,我會專門爲我需要的每個設置編寫存儲庫方法。例如。

public string GetAppenedToUsername() 
{ 
    db.Settings.FirstOrDefault(s => s.Name == "AppendedToUsername").Select(s => s.Value); 
} 

有沒有更好的設計這個數據庫的方法?

回答

1

這是一個很好的解決方案。我只建議使用這些設置創建一個強類型類併爲它們使用緩存。

緩存服務:

public class CacheService 
    { 
     private ObjectCache Cache 
     { 
      get { return MemoryCache.Default; } 
     } 

     public object Get(string key) 
     { 
      return Cache[key]; 
     } 

     public void Set(string key, object data, int cacheTime) 
     { 
      CacheItemPolicy policy = new CacheItemPolicy(); 
      policy.AbsoluteExpiration = DateTime.Now.AddMinutes(cacheTime); 

      Cache.Add(new CacheItem(key, data), policy); 
     } 

     public bool IsSet(string key) 
     { 
      return (Cache[key] != null); 
     } 

     public void Invalidate(string key) 
     { 
      Cache.Remove(key); 
     } 
    } 

AppSetting:

public class AppSetting 
{ 
    public const string StrSettingKey = "StrSetting"; 

    private CacheService CacheService { get; set; } 
    private DbContext DbContext { get; set; } 

    public AppSetting(ICacheService cache, DbContext db) 
    { 
     CacheService = CacheService; 
     DbContext = db; 
    } 

    public string StrSetting 
    { 
     get 
     { 
      if (CacheService.IsSet(StrSettingKey)) 
      { 
       return (string) CacheService.Get(StrSettingKey); 
      } 
      else 
      { 
       var value = DbContext.Settings.Single(s => s.Name == StrSettingKey).Select(s => s.Value); 
       CacheService.Set(StrSettingKey, value, 60); //one hour 
       return value; 
      } 

     } 
     set 
     { 

      var item = DbContext.Settings.Single(s => s.Name == StrSettingKey); 
      item.Value = value; 
      DbContext.SaveChanges(); 
      CacheService.Set(StrSettingKey, value); 

     } 
    } 

} 
+0

你能給出如何構造類的一些示例代碼? – 2012-02-10 15:13:28