Qual è la differenza tra JoinQueryOver e JoinAlias?


88

Ho bisogno di sapere qual è la differenza tra JoinQueryOver e JoinAlias ​​e quando utilizzarli?

Risposte:


108

Funzionalmente fanno la stessa cosa, creano un'unione a un'altra entità. L'unica differenza è ciò che restituiscono. JoinQueryOver restituisce un nuovo QueryOver con l'entità corrente che è l'entità unita, mentre JoinAlias ​​restituisce il QueryOver originale che ha l'entità corrente come entità radice originale.

Qualunque sia quello che usi è una questione di gusto personale: (da 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");

e

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

Funzionalmente sono gli stessi. Nota come il kittenAlias ​​viene espressamente indicato nella seconda query.


7
Nota che nel secondo esempio devi dichiarare gli alias Kitten kittenAlias = null;e Cat catAlias = null;precedenti. Lo trovo disordinato, quindi non lo uso a JoinAliasmeno che non sia necessario.
foka

Grazie @foka per aver chiarito questo. Mi mancava questo e mi chiedevo perché non funzionasse.
Mario Tacke

12

QueryOver Series - Part 2: Basics and Joining di Andrew Whitaker fornisce un'ottima spiegazione:

Sommario:

  • IQueryOverè un tipo generico con due parametri di tipo TRooteTSubType
  • .Selectopera su TRootmentre altri metodi QueryOver operano su TSubType.
  • TRootrimane lo stesso che stai creando una query, ma TSubTypecambia quando ti unisci usandoJoinQueryOver
  • JoinQueryOvere JoinAliasaggiungi join alla tua query. JoinAliasnon cambia TSubType, ma JoinQueryOversì.
  • È possibile utilizzare alias durante la creazione di una query per fare riferimento a proprietà che non appartengono a TRootoTSubType
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.