存储数据库中网站的系统设置和配置?

时间:2012-02-10 15:05:09

标签: sql-server asp.net-mvc database-design entity-framework-4.1

如何构建数据库?我使用带有实体框架的存储库模式和代码优先来对模型进行编码。

例如:我希望管理员设置一个字符串以附加到每个用户名。

我在考虑具有以下列的键值表(设置)? SettingsIdNameValue。使用此方法,我需要手动输入,创建记录名称:AppendedToUsername,值:nil。然后我会专门为我需要的每个设置编写存储库方法。例如。

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

有没有更好的方法来设计这个数据库?

1 个答案:

答案 0 :(得分: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);

        }
    }

}