2012-06-11 3 views
0

유창한 매핑으로 NHibernate를 사용하고 있습니다. 다음과 같은 시나리오가 있습니다 :쿼리를 사용하여 참조 속성 내에서 속성을 Nhibernate 필터로 필터링

public class A 
{ 
    public virtual int ID{get; set;} 
    public virtual B BReference {get; set;} 
    public virtual string aProperty {get; set;} 
} 

public class B 
{ 
    public virtual int ID {get;set;} 
    public virtual string Name {get; set;} 
} 

public class MapA: Map<A> 
{ 
    Id(x=> x.ID); 
    Map (x=> x.aProperty); 
    References(x => x.BReference); 
} 

public class MapB : Map<B> 
{ 
    Id(x=>x.ID); 
    Map(x=>x.Name); 
} 

내가 원하는 일은 A.BReference.Name 속성의 A 개체를 필터링하는 것입니다. 내 쿼리를 수행 할 queryover을 사용하고 있습니다 :

public object GetResult(ISession session) 
{ 
    var result = session.QueryOver<A>.Where(a=> a.BReference.Name=="Value").List(); 
    return result; 
} 

현재 NHibernate에 예외는 재산 BReference.Name의를 확인할 수 없습니다 던지고있다 : A.

이 propblem을 극복하기 위해 어떤 방법이 있나요? 우리가 의존하고 있기 때문에 나는 지금 질의 패턴을 바꿀 수 없다. 도움 주셔서 감사합니다.

답변

1

안녕하세요 당신은 조건을 작성하기 전에 JoinAlias를 사용하여 관련 테이블을로드해야합니다.

B bReference = null; 
var result = session.QueryOver<A>() 
.JoinAlias(x => x.BReference,() => bReference, NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
.Where(x => bReference.Name == "Value").List<A>(); 
+0

가명을 사용하지 않고 다른 해결책이 있습니까? –

+0

@Manar Husrieh 예. 당신은 NHibernate에 Linq를 사용할 수 있습니다. 앨리어스가 왜 너에게 나쁜가요? –

+0

우리는 동적 코드로 작업하고 있기 때문에 별칭없이 그리고 쿼리 오버없이 이미 구현했습니다. –

관련 문제