NHibernate와 enums를 저장하는 것이 좋습니다?NHibernate와 Enums
다른 식으로 말하면, 모델의 속성에서 Enum 형식을 사용해야합니까? 그것은 ID (int)입니까? 또는 문자열?
나는 Fluent NHibernate 관점에서 알고 싶다.
NHibernate와 enums를 저장하는 것이 좋습니다?NHibernate와 Enums
다른 식으로 말하면, 모델의 속성에서 Enum 형식을 사용해야합니까? 그것은 ID (int)입니까? 또는 문자열?
나는 Fluent NHibernate 관점에서 알고 싶다.
우리는 최근 직장에서 이것을 처리해야했습니다.
우리는 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);
를 매핑 할 수 있습니다, 필드는 정수에게
흥미 롭습니다. 열거 형에 새 멤버를 추가 할 때주의해야합니다. (id synch issues에 관한) – UpTheCreek
enum 값을 수동으로 지정하면 문제가 없어야합니다. –
데이터베이스의 문자열에도이 작업이 가능합니까? –
가장 일반적인 경우는 숫자 값으로 저장하는 것이 가장 일반적입니다. 특별한 것을 할 필요가 없으며 단지 속성을 매핑하십시오.
일부는 문자열 (C#에서 정의한 값의 이름)으로 저장하는 것을 선호합니다. 이 작업을 수행하는 사용자 유형이 있습니다. this blog을 참조하십시오. 내 생각에, GenericEnumMapper
은 이제 NH의 일부입니다.
외부 키를 정의하기 위해 자체 테이블에 열거 형 값을 저장하는 방법은 자주 질문합니다. 상자에서 꺼내 놓은 상태에서 NH와 같은 것은 없습니다. IMHO, 코드에서 이미 정의 된 (하드 코딩 된 상수) 데이터베이스에 값을 저장할 필요가 없습니다.
감사합니다. 당신이 언급 한 사용자 유형에 대해 더 많은 정보를 줄 수 있습니까? – UpTheCreek
I입니다 링크가 추가되었습니다. –