nhibernate join
¿Cuál es la diferencia entre JoinQueryOver y JoinAlias? (2)
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: (desde 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.
Necesito saber cuál es la diferencia entre JoinQueryOver y JoinAlias, y cuándo usar cada uno?
Gracias.
QueryOver Series - Parte 2: Basics and Join por Andrew Whitaker da una muy buena explicación:
Resumen:
IQueryOveres un tipo genérico con dos parámetros de tipoTRootyTSubType.Selectopera enTRootmientras que otros métodos de QueryOver operan enTSubType.TRootmantiene igual a medida queTSubTypeuna consulta, peroTSubTypecambia cuando se une medianteJoinQueryOverJoinQueryOveryJoinAliasagregan combinaciones a su consulta.JoinAliasno cambiaTSubType, peroJoinQueryOversíJoinQueryOverhace.- Puede usar alias cuando
TRootuna consulta para hacer referencia a propiedades que no pertenecen aTRootoTSubType