La respuesta corta es que tu SaveOrUpdate puede que nunca vaya a la base, aun asi queres recibir un evento y hacer algo?
La respuesta larga es que hay un SaveOrUpdateEventListener que debiera hacer lo que vos buscas. Gustavo. 2010/11/23 tolemaC <[email protected]> > Ahora si. > > Genial el screencast, me ha sido de mucha ayuda, sobre todo me quedo > con la frase de Scott W. Ambler, donde deja claro que para que el uso > de ORM sea un exito hay que conocer tanto la parte de los objetos como > la parte relacional, y conocidas estas hacer un buen uso de ambos > paradigmas. > > Hasta el momento yo me limitaba a usar NHibernate como una mera > herramienta para acceder a mi sistema de base de datos relacional, > pero usar un ORM implica más cosas. > > En el screencast se ha hablado de eventos también, en la parte donde > se enumeraban las cosas que un Framework ORM debería tener. > Entiendo que un ORM trabaja con los objetos mapeados desde un sistema > relacional, por lo tanto entiendo también que los eventos deberían > responder a las acciones que haces con los objetos y no a las acciones > que realiza el FW de ORM con la base de datos. Entonces si yo escribo > un PreInserEventListener y lo asocio a mi SessionFactory, dicho evento > debería ser llamado en el momento que yo guardo un objeto nuevo en el > FW. > > Es decir, si yo creo un objeto Persona y llamo a > Session.SaveOrUpdate(), NHibernate debería dispararme las llamadas a > el evento PreInsert y PostInsert antes y despues de insertar dicho > objeto en el Framework, y no hacer lo cuando el framework envíe ese > nuevo objeto a la base de datos. Para mi debe ser transparente el > cuando > NHibernate persista los objetos en la base de datos. Por lo tanto me > da igual que NHibernate no haga nada cuando yo llamo a SaveOrUpdate, > pero lo que está claro es que si el objeto es nuevo me debe llamar a > PreInsert y PostInsert y si el objeto no es nuevo me debe de llamar a > PreUpdate y PostUpdate. > > Así lo entiendo yo. > > Sin embargo he observado que NHibernate llama a los eventos solo > cuando hace Flush, ya sea por que yo llamo a Flush o por que lo hace > él internamente. Yo no quiero tener que hacer Flush para que se lancen > mis eventos, quiero que se lancen cuando les toca. > > La cosa, pues, es: ¿Los EventListeners están para disparar acciones en > los eventos de los objetos o para disparar acciones en los eventos de > los datos relacionales de mi RDBMS?? > > Yo opino que deben asociarse a los objetos, para los datos ya tenemos > los triggers. > > Saludos, > > > On 22 nov, 13:14, Fabio Maulo <[email protected]> wrote: > > Sería muy bueno que ante de usar una herramienta basada en ORM se estudie > un > > poco el Object Relational Mappinghttp:// > altnet-hispano.pbworks.com/w/page/12367724/van-2009-09-19-intr... > > > > 2010/11/22 tolemaC <[email protected]> > > > > > > > > > > > > > Vaya no tenía que haber hecho dos preguntas en un mismo mensaje :/, ya > > > lo se para la próxima. > > > > > Carlos Peix, > > > > > Imagina que estoy depurando mi código, justo antes de ejecutar el > > > SaveOrUpdate de una entidad, dentro de una transacción, con el SQL > > > Management Strudio realizo la consulta sobre la tabla y la consulta > > > devuelve los registros, cuando llamo a SaveOrUpdate y antes de hacer > > > commit, ejecuto la misma consulta en el SMS y se queda esperando hasta > > > que me da un time-out, si hago commit entonces si puedo realizar la > > > consulta. > > > > > José F. Romaniello, > > > > > Donde puedo aprender que es POID y que es HILO? no tengo ni idea de > > > que es cada una de ellas. > > > > > Gustavo, > > > > > Lo que quiero es que, aunque esté en una transacción y hayan cambios > > > pendientes de confirmar, pueda consultar la base de datos desde otro > > > proceso, como por ejemplo el SQL Management Studio, y ver los cambios > > > pendientes de dicha transacción, y en el caso de que se cancele la > > > transacción esos datos desaparecerían. > > > > > La segunda pregunta la explicaré mejor en otro mensaje para no estar > > > con dos cosas al mismo tiempo. > > > > > Muchas gracias a todos. > > > Saludos, > > > > > On 22 nov, 11:20, Carlos Peix <[email protected]> wrote: > > > > Hola tolemac, > > > > > > En cuanto al punto 1), estas seguro de que tenes un bloqueo o > simplemente > > > no > > > > ves el registro en la DB? mas precisamente, tenes una excepcion de > > > bloqueo o > > > > sacas esa conclusion porque haces el query y no aparece el registro? > > > > > > Con respecto al punto 2), por diseño es tal como lo observas. > > > eventualmente > > > > y si queres ver los datos en la base de datos, deberias hacer un > flush. > > > > > > ---------------------------------- > > > > Carlos Peix > > > > > > 2010/11/20 tolemaC <[email protected]> > > > > > > > Hola chicos, > > > > > > > Estoy haciendo un proyecto de gestión sobre WinForms con SQL Server > y > > > > > C# 4.0. > > > > > Me he decidido por usar NHibernate (+ Fluent Nhibernate) y estoy > muy > > > > > contento con él. > > > > > > > Tengo dos dudas aunque en principio no son un problema: > > > > > > > 1) Cuando bajo una transacción creo una nueva entidad y llamo a > > > > > Session.SaveOrUpdate(entidad), NHibernate me bloquea la tabla en la > > > > > base de datos hasta que no hago Commit o Rollback. Al menos no > puedo > > > > > consultarla con el SQL Management Studio. El IsolateLevel de la > > > > > transacción es ReadUncommitted. Hay alguna forma de que no te > bloquee > > > > > la tabla y se puedan ver los datos, que todavía no están > confirmados, > > > > > con el SQL Management Studio? > > > > > > > 2) Estoy manejando los eventos de la sesión (Events, no uso > > > > > Intercetors), me he dado cuenta de que cuando llamo a > > > > > Session.SaveOrUpdate no se generan los eventos hasta que no hago > Flush > > > > > en la sessión, ¿es normal? ¿como prodría evitarlo?, a mi me da > igual > > > > > cuando se haga flush, pero si me interesa mucho que el evento se > > > > > dispare cuando llamo a SaveOrUpdate. > > > > > > > Un saludo a todos y gracias de antemano. > > > > > > > -- > > > > > 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
