2010-11-19 5 views
0

성별을 'M'또는 'F'로 저장하는 'LS_GENDER'필드가있는 데이터베이스가 있습니다.FluentNHibernate : 속성과 다른 데이터 유형을 가진 필드에 액세스하는 방법

내 응용 프로그램에서는 성별을 사용하는 성별이라는 열거 형을 사용합니다.

private string _gender; 

public Gender Gender { get { return GetGenderFromString(_gender); } }; 

private Gender GetGenderFromString(string strGender) 
{ 
    switch (strGender.ToLower()) 
    { 
    case "f": 
     return Gender.Female; 
    case "m": 
     return Gender.Male; 
    default: 
     return Gender.Unknown; 
    } 
} 

가 어떻게 FluentNHibernate로이지도 않습니다

내 기업은 다음과 같은 필드와 속성이 있습니다? 필드 액세스를 사용하려고합니다 (아래 그림 참조) :

Map(x => x.Gender).Column("LS_GENDER").Access.CamelCaseField(Prefix.Underscore); 

하지만 'F를 성별로 분석 할 수 없습니다'오류가 발생합니다. 나는 속성과 필드가 같은 타입이 아니기 때문에 NHibernate가 혼란스러워하고 있다고 생각한다.

어떻게 매핑해야합니까?

답변

0

당신은 reveal을 사용하여 민간 분야지도 :

Map(Reveal.Member<ClassType>("_gender")).Column("LS_GENDER"); 

을하지만 지금 NHibernate에이 성 속성에 대해 알고하지 않기 때문에 그것은 당신의 LINQ의 문제가 해결되지 않습니다. 두 가지 문제를 해결하기 위해 IUserType을 구현하는 사용자 지정 사용자 형식을 사용합니다.

+0

IUsertype을 사용하여이 문제를 해결했습니다. Kai의 목표는 IUserType에 대해서도 이야기했지만 덜 직접적으로 언급했습니다. – David

0

데이터베이스 문자열 값 (M, F, U)을 열거 형에 매핑하고있는 것 같습니다.

이 질문에 대한 답은 열거 형을 문자열 값에 매핑하는 데 도움이 될 수 있습니다.

How do you map an enum as an int value with fluent NHibernate? Mapping custom enum classes with Fluent Nhibernate

당신은 당신이있어 열거에 문자열 (M, F, U)를 매핑 사용자 정의 형식을 사용할 수 있습니다.

사용자 지정 특성을 사용하여 문자열 값을 지정하는 열거 클래스에서. 다음 기사는이를 수행하는 방법을 알려줍니다. 도움이

http://david.gardiner.net.au/2007/11/using-enum-types-with-nhibernate.html

희망. 내 상당한 놀랍게도

+0

답변 해 주셔서 감사합니다. 첫 번째 링크가 실제로 관련이 있다고 생각하지 않습니다. 두 번째 링크는 잠재적 인 솔루션이지만 내 NHibernate 구현 외부에서 침입 코딩이 필요합니다. 성별 열거 형에 사용자 지정 특성을 추가합니다. NHibernate 내에서이 문제를 해결할 수 있어야합니다. 나는 현재 사용자 지정 IPropertyAccessor를 사용하고 있지만 작동하지 못하는 것 같습니다 ... – David

0

,이 매핑은 일 :

Map(x => x.Gender).Column("LS_GENDER").Access.CamelCaseField(Prefix.Underscore).CustomType(typeof (string)); 

그래서 매핑은 '해당 속성 유형 성별의 경우에도 직접 필드에 액세스하고 문자열로 취급'말한다.

+0

아,하지만 성별에 대해 Linq 쿼리를 수행 할 수 없습니다. 내가 얻을 : NHibernate.Criterion.SimpleExpression : Deceased.Gender 예상 형식 System.String, 실제 형식 Kctc.Gender – David

+0

에서 형식이 일치하지 않을 수도 있습니다. 사용자 지정 형식을 제공 할 수 있습니까? –

관련 문제