2009-08-29 3 views
2

저는 ASP.NET에 익숙하지 않습니다. WinForms 및 WPF에 익숙합니다. 나 좀 쉬워.데이터베이스에서 열거 형을 저장하는 좋은 방법이 있습니까?

내 페이지가로드되면 데이터베이스에 도달하여 드롭 다운 목록에 넣을 선택 항목에 대해 쿼리합니다. 이제 페이지에서 다시 게시를 수행하면 form_load에 값을 다시로드합니까? 데이터베이스를 두 번 치는 것이 불필요한 것 같습니다. 내 가정은 form_load 넣어, 열거 형에 대한 데이터베이스를 누른 다음 발견 된 값으로 드롭 다운을 채 웁니다.

답변

1

"lookup table"에 대해 이야기하고 있다고 가정합니다. 기본적으로 {Id, Name}의 스키마가 있으며 다른 테이블의 외래 키로 참조됩니다.

이 질문은 오래된 질문이며 "올바른 답변"이 없습니다.

열거 형이 변경 될 가능성이있는 경우 (관리자 사용자가 제어하는 ​​경우 일 수도 있음) 데이터베이스에서 값을 새로 고침해야하므로 @Andrei Rinea의 제안을 사용할 수 없습니다. 궁극적으로, Keltex가 짧은 만료로 결과를 제안하고 캐시하므로 최대한 효과적 일 수 있습니다. 아마도 5 분 정도면 될 것입니다. 캐시가 적 으면 성능이 크게 향상 될 수 있습니다.

열거 형이 변경되지 않을 가능성이있는 경우 ... 관리자가 UI를 통해 수정할 수없는 경우 특히 열거 형을 실제 C# 열거 형에 매핑하는 재미있는 트릭이 있습니다. 열거 테이블의 기본 키에 직접 연결된 enum의 값 이런 식으로 가능한 값 목록을 얻기 위해 데이터베이스를 전혀 방문하지 않아도됩니다.

이 트릭의 단점은 새로운 열거 항목을 사용하려면 코드를 새로 컴파일하고 새로운 배포가 필요하다는 것입니다. 이것은 이상적 일 수도 있고 그렇지 않을 수도 있으므로 신중하게 트릭을 사용하십시오.

1

응용 프로그램 시작시 Application 개체에서로드 할 수 있습니다. 나는 그들이 너무 자주 바뀌지 않을 것이라고 생각한다.

그런 다음 사용합니다. 거의 변하지 않는 '카탈로그'(일년에 한 번)에 대해서도 열거 형으로 하드 코딩합니다.

편집 : Randolpho 괜찮 말했듯이, 거의 또는 전혀 같은 숫자 값을 갖는 카탈로그에 매핑 된 C#을 열거을 변경할 같은 PaymentStatus 또는 같은 열거하십시오

. 다른 캐시의 경우 HttpRuntimeCache 개체 ("캐시")에 캐시하고 SqlDependency 중 하나만 넣습니다.

+0

은 (는) 매우 안정한 것으로 보입니다. 내 응용 프로그램이 매우 오랫동안 실행되고 enum이 그보다 약간 더 자주 변경되면 어떻게 될까요? – MedicineMan

+0

PaymentStatus 또는 이와 같은 열거 형의 경우 Randolpho가 말한 것처럼 동일한 숫자 값을 갖는 카탈로그에 매핑되는 C# 열거가 거의 또는 전혀 변경되지 않습니다. HttpRuntimeCache 개체 ("캐시")에있는 다른 캐시의 경우 절대 만료 또는 SqlDependency –

2

Page.IsPostBack 속성을 사용하여 다시 게시하는 동안 제어 할 항목을 제어합니다. 페이지가 포스트 백에있을 때를 나타내는 부울을 반환합니다. 예 :


public partial class _Default : System.Web.UI.Page { 
    protected void Page_Load(object sender, EventArgs e) { 
     if (!this.IsPostBack) { 
      // fill the enums 
     } 
    } 
} 

2

개체를 사용하고 데이터베이스 결과를 캐시에 저장하십시오.

관련 문제