Pergunta

Resolvi fazer um sistema para um cliente usando Castelo ActiveRecord, tudo correu bem até descobrir que as transações não funcionam, por exemplo;

               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();
               }

Mas não funciona, lanço uma Exception só para tentar reverter a transação, mas para minha surpresa vejo que o primeiro [Save] registra no banco de dados.O que está acontecendo?

Sou novo no Castle e no NHibernate, primeiramente achei muito atrativo e resolvi continuar com ele e MySQL (nunca trabalhei com esse banco de dados), experimentei o ActiveWriter e me pareceu muito promissor mas depois de muito e esforço semana vejo esse problema e agora sinto que estou preso e perdi meu tempo.Era para ser fácil, mas no momento estou me sentindo frustrado porque não consigo encontrar informações suficientes para fazer este treino, você pode me ajudar?

Foi útil?

Solução

Ben conseguiu.Esse documento é um pouco confuso.Consulte o último bloco na página, "Transações aninhadas".

Outras dicas

Você precisa agrupar o código em um escopo de sessão, assim:

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

Consulte Mais informação aqui.

Finalmente consertei, aconteceu que eu estava fazendo errado, substituí o método Save da classe Member e fiz sessionScope dentro e dentro dele um escopo de transação, então quando envolvi tudo isso em um escopo de transação ele salvou no banco de dados, então quando lancei a exceção já estava tudo salvo, acho que é isso.

Em suma, obrigado pela ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top