Pregunta

Decidí hacer un sistema para un cliente usando Castillo ActiveRecord, todo salió bien hasta que descubrí que las transacciones no funcionan, por ejemplo;

               TransactionScope t = new TransactionScope();

               try
               {
                   member.Save();

                   //This is just to see transaction working
                   throw new Exception("Exception");  

                   foreach (qfh.Beneficiary b1 in l)
                   {
                       b1.Create();
                   }


               }
               catch (Exception ex)
               {

                   t.VoteRollBack();
                   MessageBox.Show(ex.Message);
               }
               finally
               {
                   t.Dispose();
               }

Pero no funciona, lanzo una excepción solo para intentar revertir la transacción, pero para mi sorpresa veo que el primer [Guardar] se registra en la base de datos.¿Lo que está sucediendo?

Soy nuevo en Castle y NHibernate, al principio lo vi muy atractivo y decidí seguir con él y MySQL (nunca he trabajado con esta BD), probé ActiveWriter y me pareció muy prometedor pero después de un largo y esforzado Esta semana veo este problema y ahora siento que estoy estancado y que he perdido el tiempo.Se supone que es fácil pero ahora me siento frustrado porque no puedo encontrar suficiente información para hacer este ejercicio, ¿pueden ayudarme?

¿Fue útil?

Solución

Ben lo tiene.Ese documento es un poco confuso.Consulte el último bloque. en la pagina, "Transacciones anidadas".

Otros consejos

Debe envolver el código en un ámbito de sesión, como este:

using(new SessionScope())
{
   a.Save();
   b.Save();
   c.Save();
}

Leer más aquí.

Finalmente lo arreglé, sucedió que estaba haciendo mal, anulé el método Save de la clase Miembro e hice que sessionScope dentro y dentro de él fuera un alcance de transacción, de modo que cuando involucraba todo eso en un alcance de transacción, se guardaba en la base de datos. así que cuando lancé la excepción ya todo estaba guardado, creo que eso es todo.

Considerándolo todo, gracias por la ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top