Funkcjonalnie robią to samo, tworzą sprzężenie z innym bytem. Jedyną różnicą jest to, co zwracają. JoinQueryOver zwraca nową QueryOver z bieżącą jednostką będącą połączoną jednostką, podczas gdy JoinAlias zwraca oryginalną QueryOver, która ma bieżącą jednostkę jako oryginalną jednostkę główną.
Którykolwiek z nich wybierzesz, jest kwestią osobistego gustu: (z 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");
i
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
Funkcjonalnie są takie same. Zwróć uwagę, jak w drugim zapytaniu jest wyraźnie mowa o kittenAlias.
Kitten kittenAlias = null;
iCat catAlias = null;
wcześniejsze. Uważam, że jest brudny, więc nie używam,JoinAlias
chyba że jest to konieczne.Seria QueryOver - Część 2: Podstawy i łączenie autorstwa Andrew Whitakera daje bardzo dobre wyjaśnienie:
źródło