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


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

Gracias.

Author: Luka, 2011-03-24

2 answers

Funcionalmente hacen lo mismo, crean una unión a otra entidad. La única diferencia es lo que devuelven. JoinQueryOver devuelve una nueva QueryOver con la entidad actual siendo la entidad unida, mientras que JoinAlias devuelve la 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 lo mismo. Tenga en cuenta cómo se hace referencia expresa a las kittenAlias en la segunda consulta.

 102
Author: Vadim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-03 13:07:24

Serie QueryOver-Parte 2: Lo básico y unirse por Andrew Whitaker da una muy buena explicación:

Resumen:

  • IQueryOver es un tipo genérico con dos parámetros de tipo TRoot y TSubType
  • .Select opera en TRoot mientras que otros métodos de consulta operan en TSubType.
  • TRoot permanece igual que cuando está creando una consulta, pero TSubType cambia cuando se une usando JoinQueryOver
  • JoinQueryOver y JoinAlias añaden uniones a la consulta. JoinAlias no cambia TSubType, pero JoinQueryOver sí.
  • Puede usar alias al crear una consulta para referirse a propiedades que no pertenecen a TRoot o TSubType
 10
Author: Michał Powaga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-03 10:30:12