2010-07-21 1 views
3

Linq에서 Nhibernate와 외부 조인을 사용하여 쿼리를 생성하는 데 문제가 있습니다. 예를 들어Linq가 Nhibernate에서 외부 조인을 생성하는 이유

: 바깥이 가입

SELECT... FROM mw_crafru.clientcontact this_, mw_crafru.client client1_, mw_crafru.relationshiptype relationsh4_ WHERE this_.clientid = client1_.clientid(+) AND this_.relationshiptypeid = relationsh4_.relationshiptypeid AND client1_.clientid = :p0;:p0 = 13

주의 사항 :

return Session.Linq<ClientContact>().Where(c => c.Client.Id = 13).ToList(); 

과 유사한 쿼리를 생성합니다. clientid = client1 .clientid (+). 우우!

이 문제를 해결하기 위해 Session.CreateCriteria를 사용하여 돌아갔습니다.

return Session.CreateCriteria(typeof (ClientContact)).Add(Restrictions.Eq("Client.Id", clientId)).List<ClientContact>(); 

는 다음 쿼리를 생성합니다 :

SELECT... FROM mw_crafru.clientcontact this_, mw_crafru.client client1_, mw_crafru.relationshiptype relationsh4_ WHERE this_.clientid = client1_.clientid AND this_.relationshiptypeid = relationsh4_.relationshiptypeid AND client1_.clientid = :p0;:p0 = 13

공지 사항에는 바깥이 참여합니다. clientid = client1 .clientid. 예!

왜 이런 일이 발생하는지 알고 계십니까?

답변

0

최소한 Fluent NH를 사용하는 not-null="true" 또는 Not.Nullable()을 사용하는 다 대일 매핑으로 인해 Get 조인은 왼쪽 조인 대신 내부 조인을 사용합니다. ClientContact에서 Client에 대한 매핑에 추가해보십시오.

+0

나는 그것을 시도했다. Oracle 데이터베이스를 사용하고 Fluent NH를 사용하고 있습니다. 내 ClientContact 매핑 클래스에는 다음 참조가 있습니다. 참조 (x => x.Client) .Column ("clientid"). Not.Nullable(). LazyLoad(); –

+1

다음 버그 또는 디자인에 의해 LINQ NHibernate 수 있습니다. –

+0

저는 Jamie가 정확하다는 것을 확신합니다 ... (현재) linq 공급자는 외부 조인 만 남겨 둡니다. – DanP