¿Cuál es la diferencia entre JoinQueryOver y JoinAlias?


88

Necesito saber cuál es la diferencia entre JoinQueryOver y JoinAlias, y cuándo usar cada uno.

Respuestas:


108

Funcionalmente hacen lo mismo, crean una unión a otra entidad. La única diferencia es lo que devuelven. JoinQueryOver devuelve un nuevo QueryOver con la entidad actual siendo la entidad unida, mientras que JoinAlias ​​devuelve el QueryOver original que tiene la entidad actual como la entidad raíz original.

Cualquiera que use es una cuestión de gusto personal: (de 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");

y

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

Son funcionalmente iguales. Observe cómo se hace referencia expresa a kittenAlias ​​en la segunda consulta.


7
Tenga en cuenta que en el segundo ejemplo debe declarar los alias Kitten kittenAlias = null;y Cat catAlias = null;antes. Lo encuentro complicado, así que no lo uso a JoinAliasmenos que sea necesario.
foka

Gracias @foka por aclarar esto. Me perdí esto y me preguntaba por qué no funcionó.
Mario Tacke

12

QueryOver Series - Part 2: Basics and Unirse por Andrew Whitaker da una muy buena explicación:

Resumen:

  • IQueryOveres un tipo genérico con dos parámetros de tipo TRootyTSubType
  • .Selectopera TRootmientras otros métodos QueryOver operan TSubType.
  • TRootpermanece igual a medida que crea una consulta, pero TSubTypecambia cuando se une usandoJoinQueryOver
  • JoinQueryOvery JoinAliasagregue uniones a su consulta. JoinAliasno cambia TSubType, pero lo JoinQueryOverhace.
  • Puede utilizar alias al crear una consulta para hacer referencia a propiedades que no pertenecen TRootaoTSubType
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.