Seria interesante saber porque quieres escuchar el evento de SaveOrUpdate ? Los eventos a los que te refieres son eventos de persistencia y no de los objetos pues estos no conocen nada de persistencia. Los triggers son por decirlo asi eventos particulares del motor de persistencia.
Saludos. 2010/11/23 Gustavo Ringel <[email protected]> > 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 > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
