JoinQueryOver와 JoinAlias의 차이점은 무엇이며 언제 사용해야하나요?
답변
기능적으로는 동일한 작업을 수행하고 다른 엔터티에 대한 조인을 만듭니다. 유일한 차이점은 그들이 반환하는 것입니다. 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가 어떻게 명시 적으로 참조되는지 확인합니다.
답변
QueryOver Series-Part 2 : Andrew Whitaker의 기본 및 조인 은 매우 좋은 설명을 제공합니다.
요약:
IQueryOver
두 개의 유형 매개 변수가있는 일반 유형TRoot
이며TSubType
.Select
에서 작동TRoot
다른 QueryOver의 방법에서 작동하기는하지만TSubType
.TRoot
당신은 쿼리를 작성하고 같은 숙박 만TSubType
변경 사용 조인JoinQueryOver
JoinQueryOver
및JoinAlias
추가는 쿼리에 조인.JoinAlias
변경되지 않습니다TSubType
,하지만JoinQueryOver
않습니다.- 쿼리를 작성 할 때에 속하지 않는 속성을 참조하는 별칭을 사용할 수 있습니다
TRoot
또는TSubType