2

데이터베이스를 어떻게 구성합니까? 필자는 엔터티 프레임 워크 및 코드 우선 저장소 패턴을 사용하여 모델을 코딩합니다.데이터베이스의 웹 사이트에 대한 시스템 설정 및 구성 저장?

예 : 관리자가 모든 사용자 이름에 추가 할 문자열을 설정하도록합니다.

다음 열이있는 키 - 값 테이블 (설정)에 대해 생각하고 있었습니까? SettingsId, Name, Value. 이 방법을 사용하면 수동으로 들어가서 레코드 이름을 만듭니다. 이름 : 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

당신이 클래스를 구성하는 방법에 대한 몇 가지 샘플 코드를 제공 할 수? –

관련 문제