Buenisimo! muchas gracias por todo. Abrazo, Raul
Gustavo Ringel escribió: > Lo podes bajar del trunk de uNHAddins tanto mi ejemplo, como los > ejemplos que Fabio menciona en su blog. uNHaddins esta hosteado en > google code. Mi ejemplo esta en el directorio examples. > Lo de fabio creo que estan en el trunk pero en la parte del blog > Hunabku, en los articulos de Fabio podes seguir los links. > Si algo no te queda claro pregunta en la lista de uNHAddins o mandame mail. > > Abrazo. > > Gustavo. > > 2009/1/12 Raul Lopez <[email protected] <mailto:[email protected]>> > > > 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]> <mailto:[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]>> > <mailto:[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]>>> > > > > [mailto:[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]>> > > > <mailto:[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 -~----------~----~----~----~------~----~------~--~---
