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. 예!
왜 이런 일이 발생하는지 알고 계십니까?
나는 그것을 시도했다. Oracle 데이터베이스를 사용하고 Fluent NH를 사용하고 있습니다. 내 ClientContact 매핑 클래스에는 다음 참조가 있습니다. 참조 (x => x.Client) .Column ("clientid"). Not.Nullable(). LazyLoad(); –
다음 버그 또는 디자인에 의해 LINQ NHibernate 수 있습니다. –
저는 Jamie가 정확하다는 것을 확신합니다 ... (현재) linq 공급자는 외부 조인 만 남겨 둡니다. – DanP