2010-05-07 5 views
3

NHibernate와 enums를 저장하는 것이 좋습니다?NHibernate와 Enums

다른 식으로 말하면, 모델의 속성에서 Enum 형식을 사용해야합니까? 그것은 ID (int)입니까? 또는 문자열?

나는 Fluent NHibernate 관점에서 알고 싶다.

+0

I입니다 링크가 추가되었습니다. –

답변

4

우리는 최근 직장에서 이것을 처리해야했습니다.

우리는 FluentNhibernate을 사용하고 우리는이에 대한 규칙을 만들어 :

public class EnumConvention : IPropertyConvention, IConventionAcceptance<IPropertyInspector> 
{ 
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) 
    { 
     criteria.Expect(x => x.Property.PropertyType.IsEnum); 
    } 

    public void Apply(IPropertyInstance instance) 
    { 
     instance.CustomType(instance.Property.PropertyType); 
    } 
} 

그런 다음 당신은 그냥 데이터베이스에서 귀하의 재산

Map(x => x.Enum); 

를 매핑 할 수 있습니다, 필드는 정수에게

+0

흥미 롭습니다. 열거 형에 새 멤버를 추가 할 때주의해야합니다. (id synch issues에 관한) – UpTheCreek

+0

enum 값을 수동으로 지정하면 문제가 없어야합니다. –

+0

데이터베이스의 문자열에도이 작업이 가능합니까? –

2

가장 일반적인 경우는 숫자 값으로 저장하는 것이 가장 일반적입니다. 특별한 것을 할 필요가 없으며 단지 속성을 매핑하십시오.

일부는 문자열 (C#에서 정의한 값의 이름)으로 저장하는 것을 선호합니다. 이 작업을 수행하는 사용자 유형이 있습니다. this blog을 참조하십시오. 내 생각에, GenericEnumMapper은 이제 NH의 일부입니다.

외부 키를 정의하기 위해 자체 테이블에 열거 형 값을 저장하는 방법은 자주 질문합니다. 상자에서 꺼내 놓은 상태에서 NH와 같은 것은 없습니다. IMHO, 코드에서 이미 정의 된 (하드 코딩 된 상수) 데이터베이스에 값을 저장할 필요가 없습니다.

+1

감사합니다. 당신이 언급 한 사용자 유형에 대해 더 많은 정보를 줄 수 있습니까? – UpTheCreek