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
