Eso sirve sólo cuando las grabaciones se hacen por código de usuario,
pero cuando NH decide grabar porque tiene grabaciones pendientes y al
hacer una consulta graba... lo tuyo ya no sirve.

A nivel de dao ya lo tengo... pero al nivel que comento lo tuyo no
basta

On 4 feb, 14:29, "[email protected]" <[email protected]>
wrote:
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeginTransaction())
> {
>     try {
>         .....
>         session.Update(obj);
>         .....
>
>         tx.Commit();
>     } catch (Exception ex) {
>         tx.Rollback();
>         if (ex is StaleStateException)
>             throw new DataConcurrencyException("blablabla", ex);
>         throw new MyException("blablabla", ex);
>     }
>
> }
>
> también podés hacer 2 catch, uno para StaleStateException y otro para
> Exception y copiar en ambos la línea del Rollback, a gusto del
> consumidor.
>
> Algo que tenes que tener en cuenta es que una vez que una exception es
> lanzada desde nh la session deja de ser "estable", por lo que lo mejor
> es cerrarla y abrir una nueva (en este código se hace porque después
> de la excepción está el dispose, pero si no fuese así te tenés que
> asegurar de cerrarla.
>
> saludos
> nelo
>
> 2011/2/4 Juan Cuello <[email protected]>:
>
>
>
>
>
>
>
> > Hola a todos,
>
> > Debido a que estamos desarrollando un proyecto con arquitectura
> > desacoplada, nos encontramos con un problema en la gestión de
> > concurrencia. El problema es que cuando salta una excepción de
> > concurrencia StaleStateException, queremos automatizar que en realidad
> > se lance una excepción de nuestro framework.
>
> > La idea que he tenido es agregar un listener que herede por ejemplo de
> > DefaultUpdateEventListener para hacer lo siguiente:
>
> >        protected override object
> > PerformSaveOrUpdate(NHibernate.Event.SaveOrUpdateEvent @event)
> >        {
> >            try
> >            {
> >                return base.PerformSaveOrUpdate(@event);
> >            }
> >            catch (StaleStateException ex)
> >            {
> >                throw new DataConcurrencyException(ex.Message, ex);
> >            }
> >        }
>
> > Para la concurrencia, que sólo saltaría en updates (lógicamente), de
> > qué clase debo heredar:  DefaultUpdateEventListener,
> > DefaultSaveEventListener, DefaultSaveOrUpdateEventListener,
> > DefaultSaveOrUpdateCopyEventListener?????
>
> > A alguien se le ocurre una forma mejor de hacer esto?
>
> > Muchas gracias
>
> > --
> > 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

Responder a