Gustavo, me interesa lo de uNHAddins. El ejemplo de sessionManagent esta 
disponible?
Necesito entrar a prolijar esto cuanto antes. Si veo que lo puedo aplicar ahora 
ok, y de lo contrario lo voy viendo para otro proyecto.

Raul.

Gustavo Ringel escribió:
> Bueno, ingresar rapido o no depende un poco de que tenes hasta ahora. No 
> siempre es facil cambiar de estrategia si el orden no se adapta a la 
> logica de lo que tenes hecho. En el caso de conversation si lo que 
> inyectas en los repositorios es el sessionfactory es muy facil (es la 
> mejor manera de trabajar con multiples bases de datos de manera ordenada 
> esta)
> 
> La gran sesion es un gran peligro. El acceso a las lineas lo hubieras 
> obtenido si hubieras usado fetch join en el caso de HQL o eager load en 
> criteria o directamente lazy=false si para todos los casos de uso 
> necesitas el elemento. Empezar a hacer roundtrips a la base con lazy es 
> peligroso, la idea es que si en un caso de uso lo necesitas usas una 
> estrategia de fetch eager y si no lo necesitas no haces nada...
> 
> Por ahi la magia de NH...
> 
> En el ejemplo que tengo de sessionManagement en uNHAddins estoy usando 
> los objetos de dominio en el form, y mantengo una conversacion a la que 
> paso los objetos de un lado a otro hasta que se termina. En mi caso en 
> produccion en general trabajo con DTO's que implementan las estrategias 
> de binding de Winforms o WPF o lo que este usando y por tanto no uso 
> todas las maravillas de NH durante el trabajo en el Form...esto tiene 
> pros y contras.
> 
> Mi estrategia de DTO fue tomada cuando no tenia forma de trabajar con 
> conversacion, ahora estoy evaluando todavia si usare eso o no...todavia 
> soy mas tendiente a eso, porquen o me gusta que mis objetos de dominio 
> tengan que implementar cosas de Binding...pero en algunos proyectos 
> puede ser util...
> 
> Gustavo.
> 
> 009/1/12 Raul Lopez <[email protected] <mailto:[email protected]>>
> 
> 
>     Gustavo, actualmente abro la sesion en el constructor del presenter
>     y la paso como argumento cuando accedo al repositorio.
>     De esa forma tengo una "gran sesion". En principio tenía una sesion
>     por acceso al repositorio, pero el problema era que al traer un
>     objeto factura p.ej, al cerrar la sesion a la vuelta del repositorio
>     perdia el acceso a las lineas por el tema del lazy.
>     De todos modos esta estrategia me esta dando problemas, como el de
>     los commits que mencionas.
>     Me interesa lo uNHAddins. Es algo que se pueda incorporar en una
>     forma relativamente rápida?
> 
>     Saludos,
>     Raul.
> 
>     Gustavo Ringel escribió:
>      > Raul, a la primer excepcion que te de la sesion tenes que tirar
>     el form
>      > con esa estrategia.
>      > Si haces algo en un background worker no puede usar la sesion que
>      > iniciaste en el constructor.
>      > Si haces algo en un timer no podes usar la sesion que iniciaste en el
>      > constructor.
>      > Idem para threads.
>      >
>      > Es decir, no vas a estar contento rapidamente.
>      >
>      > Una solucion relativamente "rapida" es usar un presenter y que el
>      > presenter sea el encargado de hacer opensession en cada funcion
>     llama a
>      > los servicios/repositorios encargados de realizar un caso de uso
>     y commitea.
>      >
>      > Obviamente el problema que tenes aca es que pasa si lo que queres es
>      > abrir una orden agregar algunas lineas, etc, todo en la misma
>      > conversacion de manera que todo lo que hiciste se commitee o solo
>     una parte.
>      >
>      > Es decir, en lo que dije antes si abris la orden commitea, luego
>     creas
>      > algunass lineas se commitean, luego tenes algun problema...y ups, no
>      > podes abortar, tenes que borrar a mano.
>      > En el patron de conversacion de uNHAddins con una estrategia
>     razonable
>      > para el id (no identity obviamente sino cualquier otra :)) podes
>     volver
>      > atras toda la conversacion...
>      >
>      > Saludos.
>      >
>      > Gustavo.
>      >
>      > 2009/1/12 Raul Lopez <[email protected]
>     <mailto:[email protected]> <mailto:[email protected]
>     <mailto:[email protected]>>>
>      >
>      >
>      >     Carlos, estoy usando algo asi donde _session es global y aplico
>      >     NHibernateSessionFactory.OpenSession() en el constructor.
>      >     En principio funciona, ahora voy a ver que pasa cuando
>     traslade este
>      >     tema de parent-child a la aplicacion real.
>      >     Si se me complica aviso :)
>      >
>      >     Saludos,
>      >     Raul.
>      >
>      >
>      >     Carlos Peix escribió:
>      >      > Hola Raul,
>      >      >
>      >      > Normalmente no uso winforms pero por ahí este patron podria
>      >     funcionarte:
>      >      >
>      >      > using ( ITransaction tx = _session.BeginTransaction() )
>      >      > {
>      >      >       // Aquí haces todas tus actualizaciones
>      >      >
>      >      >       tx.Commit();
>      >      > }
>      >      >
>      >      > Donde _seesion es la variable de instancia del form, ahí
>     tenes la
>      >     sesion
>      >      > abierta y tenes un scope bien limitado para la transaccion.
>      >      >
>      >      > En cuanto a esto:
>      >      >> - Estas agregando LA MISMA INSTANCIA de chuild a todos los
>      >     parents, me
>      >      >> parece que eso no es lo que queres hacer.
>      >      > a los efectos de la prueba me parecio que no era
>     relevante, pero...
>      >      >
>      >      > [Carlos] Creo que es muy relevante porque en el Child
>     tenes una
>      >     referencia
>      >      > al parent, lo cual invalida que un child pueda pertenecer a
>      >     varios parents.
>      >      > Incluso diria que este es el motico por el cual te quedaba un
>      >     child asociado
>      >      > a un solo parent (el ultimo), supondiendo que estuvieras
>     haciendo la
>      >      > referencia al parent, cosa que no se ve en tu codigo.
>      >      >
>      >      >
>      >      > Suerte
>      >      >
>      >      > Carlos Peix
>      >      >
>      >      > -----Mensaje original-----
>      >      > De: [email protected]
>     <mailto:[email protected]>
>      >     <mailto:[email protected]
>     <mailto:[email protected]>>
>      >      > [mailto:[email protected]
>     <mailto:[email protected]>
>      >     <mailto:[email protected]
>     <mailto:[email protected]>>] En nombre de Raul Lopez
>      >      > Enviado el: Lunes, 12 de Enero de 2009 11:44 a.m.
>      >      > Para: [email protected]
>     <mailto:[email protected]>
>      >     <mailto:[email protected]
>     <mailto:[email protected]>>
>      >      > Asunto: [NHibernate-Hispano] Re: ayuda con coleccion
>      >      >
>      >      >
>      >      > Hola Carlos, en efecto habia varias cosas mal (lo copie
>      >     correctamente al
>      >      > mail). Probe con tu codigo y funciona.
>      >      > Te comento conclusiones entre lineas:
>      >      >
>      >      > Carlos Peix escribió:
>      >      >> Hola Raul,
>      >      >>
>      >      >> Hay varias cosas en tu ejemplo que no estan bien, no se
>     si porque lo
>      >      >> copiaste incorrectamente al mail o porque estan
>     definitivamente mal.
>      >      >> Te pido que reescribas tu codigo de esta manera (y que
>     cambies
>      >     lo que
>      >      >> corresponda siempre y cuando entiendas los motivos).
>     Estos son los
>      >      >> puntos que no me cierran
>      >      >>
>      >      >> - No queda claro el scope de la variable _session.
>      >      > es global para todo el form
>      >      >
>      >      >> - Estas agregando LA MISMA INSTANCIA de chuild a todos los
>      >     parents, me
>      >      >> parece que eso no es lo que queres hacer.
>      >      > a los efectos de la prueba me parecio que no era
>     relevante, pero...
>      >      >
>      >      >> - Veo una propiedad Parent en el child que no estas
>     seteando en el
>      >      >> codigo que enviaste.
>      >      > fue omision, no lo vi
>      >      >
>      >      >> - Estas haciendo un update con cada parent, esto no seria
>     necesaro,
>      >      >> incluso no es necesario hacer ninguno con la opcion de
>     cascade
>      >     que tenes.
>      >      > de acuerdo, esta de mas
>      >      >
>      >      >> // Aca achicas mucho mas el scope de session, el metodo //
>      >      >> CreateSession() depende de cómo manejes e sessionFactory
>     // pero
>      >      >> deberia ser una sesion nueva puesto que estas haciendo //
>     el Dispose
>      >      >> al salir del using(), esa sesion no servira para // nada mas.
>      >      >
>      >      > aca no hay problema, pero en el programa real se me
>     complica si
>      >     no hago la
>      >      > sesion global (tengo lio con el lazy) Voy a estudiar mas
>     sobre el
>      >     tema del
>      >      > manejo de las sesiones.
>      >      >
>      >      > Muchas gracias una vez mas.
>      >      >
>      >      > Saludos,
>      >      > Raul.
>      >      >
>      >      >
>      >      >
>      >      >
>      >      >
>      >      > >
>      >      >
>      >
>      >
>      >
>      >
>      > >
> 
> 
> 
> 
> > 

--~--~---------~--~----~------------~-------~--~----~
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