JoinQueryOver와 JoinAlias의 차이점은 무엇입니까?


88

JoinQueryOver와 JoinAlias의 차이점은 무엇이며 언제 사용해야하나요?

답변:


108

기능적으로는 동일한 작업을 수행하고 다른 엔터티에 대한 조인을 만듭니다. 유일한 차이점은 그들이 반환하는 것입니다. JoinQueryOver는 현재 엔터티가 조인 된 엔터티와 함께 ​​새 QueryOver를 반환하는 반면 JoinAlias는 현재 엔터티가 원래 루트 엔터티 인 원래 QueryOver를 반환합니다.

어떤 것을 사용하든 개인적인 취향의 문제입니다 : ( http://nhibernate.info/doc/nh/en/index.html#queryqueryover에서 )

IQueryOver<Cat,Kitten> catQuery =
    session.QueryOver<Cat>()
        .JoinQueryOver<Kitten>(c => c.Kittens)
            .Where(k => k.Name == "Tiddles");

Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
    session.QueryOver<Cat>(() => catAlias)
        .JoinAlias(() => catAlias.Kittens, () => kittenAlias)
        .Where(() => kittenAlias.Name == "Tiddles");

기능적으로 동일합니다. 두 번째 쿼리에서 kittenAlias가 어떻게 명시 적으로 참조되는지 확인합니다.


7
두 번째 예에서는 별칭 Kitten kittenAlias = null;Cat catAlias = null;이전 버전 을 선언해야합니다 . 나는 그것이 지저분하다는 것을 알기 때문에 필요하지 않으면 사용하지 않습니다 JoinAlias.
foka

이것을 명확히 해주신 @foka에게 감사드립니다. 나는 이것을 놓치고 왜 작동하지 않는지 궁금했습니다.
Mario Tacke 2014 년

12

QueryOver Series-Part 2 : Andrew Whitaker의 기본 및 조인 은 매우 좋은 설명을 제공합니다.

요약:

  • IQueryOver두 개의 유형 매개 변수가있는 일반 유형 TRoot이며TSubType
  • .Select에서 작동 TRoot다른 QueryOver의 방법에서 작동하기는하지만 TSubType.
  • TRoot당신은 쿼리를 작성하고 같은 숙박 만 TSubType변경 사용 조인JoinQueryOver
  • JoinQueryOverJoinAlias추가는 쿼리에 조인. JoinAlias변경되지 않습니다 TSubType,하지만 JoinQueryOver않습니다.
  • 쿼리를 작성 할 때에 속하지 않는 속성을 참조하는 별칭을 사용할 수 있습니다 TRoot또는TSubType
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.