Funktionell machen sie dasselbe, erstellen einen Join zu einer anderen Entität. Der einzige Unterschied ist, was sie zurückgeben. JoinQueryOver gibt einen neuen QueryOver zurück, wobei die aktuelle Entität die verknüpfte Entität ist, während JoinAlias den ursprünglichen QueryOver zurückgibt, der die aktuelle Entität als ursprüngliche Stammentität hat.
Welches Sie verwenden, ist eine Frage des persönlichen Geschmacks: (von 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");
und
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
Sind funktional gleich. Beachten Sie, wie in der zweiten Abfrage ausdrücklich auf kittenAlias verwiesen wird.
Kitten kittenAlias = null;
undCat catAlias = null;
früher deklarieren müssen . Ich finde es chaotisch, also benutze ich es nur,JoinAlias
wenn es notwendig ist.QueryOver Series - Teil 2: Grundlagen und Beitritt von Andrew Whitaker gibt eine sehr gute Erklärung:
quelle