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