Necesito saber cuál es la diferencia entre JoinQueryOver y JoinAlias, y cuándo usar cada uno?¿Cuál es la diferencia entre JoinQueryOver y JoinAlias?
gracias.
Necesito saber cuál es la diferencia entre JoinQueryOver y JoinAlias, y cuándo usar cada uno?¿Cuál es la diferencia entre JoinQueryOver y JoinAlias?
gracias.
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 se utiliza 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. Observe cómo se hace referencia expresa a kittenAlias en la segunda consulta.
QueryOver Series - Part 2: Basics and Joining by Andrew Whitaker da una muy buena explicación:
Resumen:
IQueryOver
es un tipo genérico con dos parámetros de tipoTRoot
yTSubType
.Select
opera enTRoot
mientras que otros métodos QueryOver operan enTSubType
.TRoot
sigue siendo el mismo que usted está construyendo una consulta, peroTSubType
cambia cuando se une a usarJoinQueryOver
JoinQueryOver
yJoinAlias
complemento se une a su consulta.JoinAlias
no cambiaTSubType
, peroJoinQueryOver
hace.- Puede utilizar alias en la construcción de una consulta para hacer referencia a propiedades que no pertenecen a
TRoot
oTSubType
Tenga en cuenta que en el segundo ejemplo, usted tiene que declarar los alias 'kittenAlias gatito = NULL;' y 'Cat catAlias = null;' anterior. Lo encuentro desordenado, así que no uso 'JoinAlias' a menos que sea necesario. – foka
Gracias @foka por aclarar esto. Me perdí esto y me preguntaba por qué no funcionó. –