Te cuento lo que pasó esta mañána.
El lead de un prj en el que trabajo me mandó un mail, un IM en Gtalk y un IM
en Skype.... yo a esa hora dormia...
El pedido de ayuda era fuerte...
Allí ya estamos usando EQO pero me quedó claro que no se entendió lo basico.
El problema era que el provider LINQ no suporta SelectMany...
Como estabamos en una EQO y el test ya existía me llevó un minuto (y digo en
serio) escribir esta HQL

return sessionFactory.GetCurrentSession().CreateQuery("select a from Company
c join c.Addresses a where c.Id =
:pCompany").SetGuid("pCompany",CompanyId).List<Address>();

Test en verde, y commit.

Luego se me puso a discutir que la quería en LINQ o sea
var companies = sessionFactory.GetCurrentSession().Query<Company>();
return
from c in companies
from a in c.Addresses
where c.Id == CompanyId
select a;

Test en verde y commit con el siguiente comment: Because Michele taste, same
query but using LINQ

Ya que yo le dije de controlar la SQL, Michele fue a controlarla y ahora el
codigo es así
return
this.sessionFactory.GetCurrentSession().GetNamedQuery("GetAddressesFromCompany").SetGuid("pCompany",
this.CompanyId).List<Address>();

eso es lo que pasa con EQO : una clase, una responsabilidad y adentro la
responsabilidad la resolves con lo que mas es acorde al resultado que
buscas.

2010/7/14 Juan Cuello <[email protected]>

> Tengo una duda de uso de NHibernate.Linq a nivel de arquitectura y una
> sugerencia de NHibernate.Linq que me gustaría que Fabio  o alguien que
> conozca bien la librería criticara (de forma constructiva) antes de
> agregarlo yo mismo al código:
>
>
> DUDA:
>
> Suponiendo que usamos Daos o repositorios, el uso de linq debería
> quedar encapsulado en los métodos de la implementación de los daos (o
> repositorios) o debería exponerse INHibernateQueryable<T> o
> IOrderedQueryable<T> para que se pueda explotar el linq desde
> cualquier punto?
>
> 1) Exponer INHibernateQueryable<T> tiene el problema de que se
> necesita desde donde se use el dao una referencia a NHibernate.Linq y
> a NHibernate, por tanto, si tenemos un ensamblado con las interfaces
> de los Daos, creo que no es una solución correcta, ya que sometemos
> las interfaces a la tecnología subyacente.
>
> 2) Exponer IOrderedQueryable<T> elimina la necesidad de referencias
> pero perdemos la capacidad de especificar las QueryOptions ¿?
>
> 3) Encapsular la consulta linq dentro de un método del dao elimina los
> problemas 1 y 2, pero deberemos crear una función para cada consulta
> con sus diferentes parámetros, cosa que nos podemos evitar permitiendo
> el uso de linq. Aunque de esta forma acotamos el ámbito al realizar
> tests de los Daos y podemos evitar las limitaciones que tenga la
> librería.
>
> SUGERENCIA
>
> En NHibernateExtensions hay una serie de funciones y, en una en
> especial:
>
>        public static INHibernateQueryable<T> Linq<T>(this ISession session)
>                {
>                        QueryOptions options = new QueryOptions();
>                        return new Query<T>(new
> NHibernateQueryProvider(session, options),
> options);
>                }
>
>  Se crea QueryOptions sin posibilidad de especificar opciones. ¿Sería
> incorrecto crear otra extensión del tipo?:
>
>        public static INHibernateQueryable<T> Linq<T>(this ISession session,
> QueryOptions options)
>                {
>                        QueryOptions options = options ?? new
> QueryOptions();
>                        return new Query<T>(new
> NHibernateQueryProvider(session, options),
> options);
>                }
>
> Para dar la posibilidad de especificar las opciones en la misma
> extensión? O se debe hacer de otra forma la especificación de
> opciones?
>
> Muchas gracias
>
> On 14 jul, 16:45, Juan Cuello <[email protected]> wrote:
> > Jejeje, lo tengo en twitter pero creo que se ha cansado de mí :P
> >
> > On 14 jul, 14:36, Gustavo Ringel <[email protected]> wrote:
> >
> >
> >
> > > Ahi tenes otra cosa, seguir el twitter de Fabio :P.
> >
> > > 2010/7/14 Fabio Maulo <[email protected]>
> >
> > > > La ultima vez me parece que esos chicos lo anunciaron solo en
> twitter...
> > > > que pendejos que son!
> >
> > > > 2010/7/14 Gustavo Ringel <[email protected]>
> >
> > > >> Subscribiendote a sourceforge recibis mails cuando liberan
> versiones.
> > > >> Te recomiendo subscribirte al grupo en ingles y a NHForge, ahi
> tambien a
> > > >> veces se anuncia.
> >
> > > >> Gustavo.
> >
> > > >> 2010/7/14 Juan Cuello <[email protected]>
> >
> > > >> Vale, Entonces lo usaremos pero con cuidado :)
> >
> > > >>> Y eso! Yo también quiero saber cuándo se libera NH3! En cada
> iteración
> > > >>> estoy más enamorado de NH :)
> >
> > > >>> Fabio, tenéis algún sistema de mailing para notificación de cambios
> de
> > > >>> NH o liberación de releases? Sería muy interesante y yo mismo me
> > > >>> suscribiría para empezar :)
> >
> > > >>> On 13 jul, 16:29, Edgar Ramos <[email protected]> wrote:
> > > >>> > Por cierto cuando se libera nh3, (o ya se libero oficialmente y
> no me
> > > >>> enterado)
> >
> > > >>> > Saludos
> >
> > > >>> > Edgar
> >
> > > >>> > El día 13 de julio de 2010 09:19, José F. Romaniello
> > > >>> > <[email protected]> escribió:
> >
> > > >>> > > a mi me funciona bien, es muy difícil de decir si esta listo
> para
> > > >>> > > producción, lo único que te puedo decir que la versión que esta
> en
> > > >>> > > NHibernate 3 (trunk) session.Query<T>()
> > > >>> > > funciona mucho mejor que la que esta en nhcontrib para 2.1
> > > >>> > > (session.Linq<T>())
> >
> > > >>> > > El 13 de julio de 2010 11:14, Juan Cuello <
> [email protected]>
> > > >>> escribió:
> >
> > > >>> > >> Hola,
> >
> > > >>> > >> Pregunta simple a quien lo haya utilizado:
> >
> > > >>> > >> ¿Funciona bien NHibernate.Linq o tiene fallos? ¿Podría
> utilizarse en
> > > >>> > >> un entorno de producción?
> >
> > > >>> > >> Muchas gracias
> >
> > > >>> > >> --
> > > >>> > >> Para escribir al Grupo, hágalo a esta dirección:
> > > >>> > >> [email protected]
> > > >>> > >> Para más, visite:
> http://groups.google.com/group/NHibernate-Hispano
> >
> > > >>> > > --
> > > >>> > > Para escribir al Grupo, hágalo a esta dirección:
> > > >>> > > [email protected]
> > > >>> > > Para más, visite:
> http://groups.google.com/group/NHibernate-Hispano
> >
> > > >>> --
> > > >>> Para escribir al Grupo, hágalo a esta dirección:
> > > >>> [email protected]
> > > >>> Para más, visite:http://groups.google.com/group/NHibernate-Hispano
> >
> > > >>  --
> > > >> Para escribir al Grupo, hágalo a esta dirección:
> > > >> [email protected]
> > > >> Para más, visite:http://groups.google.com/group/NHibernate-Hispano
> >
> > > > --
> > > > Fabio Maulo
> >
> > > >  --
> > > > Para escribir al Grupo, hágalo a esta dirección:
> > > > [email protected]
> > > > Para más, visite:http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>



-- 
Fabio Maulo

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a