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]>>
> 
> 
>     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]>] En nombre de Raul Lopez
>      > Enviado el: Lunes, 12 de Enero de 2009 11:44 a.m.
>      > Para: [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