2011-10-14 3 views
0

NHibernate에서 지원되는지 알 수없는 맵을 만들려고합니다.데이터 소스로 두 번째 테이블을 사용하여 NHibernate의 bool에 int를 매핑하십시오.

은 내가 유창함 NHibernate에의 매핑이있는 테이블 A를 가지고있다. 나는 B.I.을 검색해야하는 B라는 테이블이 있습니다. 이 테이블에서이 ID를 찾으면 클래스 A에 대한 매핑에서 bool 속성을 true로 설정해야합니다. 그렇지 않으면 false로 설정해야합니다. 테이블 A 및 테이블 B 사이

는 hasOne의 방법에 맵핑에 표시 한 관계에 하나가있다. 문제는 HasOne에 결과를 bool 속성으로 변환하는 데 사용할 수있는 CustomType 메서드가 없다는 것입니다.

는 또한 매핑에서 비트 또는 INT에 값을 캐스팅 괜찮을 것하지만 할 방법을 모르겠어요.

가능하다면 누구에게 알리십니까? 그렇다면 어떻게 할 수 있습니까?

고맙습니다. Mosu.

답변

1

공식은 이러한 시나리오를 위해 만들어

Map(x => x.BooleanProperty).Formula("SELECT true IF EXISTS (SELECT 1 FROM B WHERE B.A_id = Id)"); 

편집 :

FIRO가 정답을 제공

// public AMap() 
Join("TableB", join => 
{ 
    join.KeyColumn("A_id"); 
    join.Optional(); 
    Map(x => x.BooleanPropery, "someBcolumn").Not.Insert().Not.Update().CustomType<NullToFalseElseTrue>(); 
}); 

// class A 
public virtual bool BooleanPropery { get; private set; } 
+0

답장을 보내 주셔서 감사합니다. 소스 코드에서 SQL 사용을 피하려고합니다. 이것에 대한 또 다른 해결책이 있습니까? 보호 된 멤버를 사용하고 bool 값을 반환하는 메서드에서 해당 값을 사용하려고하는 것을 알고 있습니다. – mosu

+0

두 번째 접근 방식에서 나는 select에서 컬럼을 얻을 수 없으므로 CustomType에서 변환 할 수 없다. (나는 A.Id를 얻었지만 B.Id도 필요하다.) 구문을 사용하고 있습니다. 내가 뭘 잘못하고 있는지 알 겠어? – mosu

+0

당신은 booleanproperty에 대한 열로 b.id를 사용할 수 없습니까? – Firo

0

(안 테스트) 또 다른 방법. 그러나 코드에는 약간의 문제가 있으므로 (질문보다는) 좀 더 가시성을 위해 제 질문에 대답하고 있습니다.

Join("TableB", join => 
{ 
    join.KeyColumn("A_id"); 
    join.Optional(); 
    join.Map(x => x.BooleanPropery, "someBcolumn").Not.Insert().Not.Update().CustomType<NullToFalseElseTrue>(); 
}); 

차이는 작지만 중요합니다. Join 대행자의 세 번째 줄에 'join'이 누락되어 있지 않으면 NHibernate는 B_Id 대신 B_Id 대신 B_Id 대신 A_ID 열을 BooleanProperty와 매핑한다고 말합니다.