Efeitos de um begintransaction dentro de um for

0 respostas
Robertoalvespereira1
vendasDoPdv.ForEach(vendaPdv =>

{

if (IgnoraNessaSincronizacao(vendaPdv))

return;
var ecfCompativel = BuscaEcfCompativelDoAdm(emissoresDoAdm, vendaPdv);
            if (ecfCompativel == null)
                return;

            PessoaDt pessoaComaptivel = null;

            if (vendaPdv.ClienteDt != null)
                pessoaComaptivel = BuscaPessoaCompativel(vendaPdv);

            if (vendaPdv.ClienteDt != null && pessoaComaptivel == null)
                return;

            var transacaoAdm = SessaoAdm.BeginTransaction();
            var transacaoPdv = SessaoPdv.BeginTransaction();

            var vendaAdm = CriarVendaAdm(vendaPdv, pessoaComaptivel, ecfCompativel);

            try
            {
                PersitirVenda(vendaPdv, vendaAdm);
                EnviarItens(vendaPdv.VendaEcfItens, vendaAdm);
                EnviarPagamentos(vendaPdv.VendaEcfPagamentos, vendaAdm);

                transacaoAdm.Commit();
                transacaoPdv.Commit();
                RegistraEvento = true;
            }
            catch (Exception)
            {
                transacaoPdv.Rollback();
                transacaoAdm.Rollback();
                throw;
            }
        });

oque acontece, ele deu um erro e logo depois do erro que ele entrou no catch , quando ele foi executar o transacaoAdm.Rollback();

ele lançou outra exception, e não fez o Rollback() -.-'
aí oque acontece… eu deletei o registro que ele não fez rollback, e tudo funcionou normalmente…
simplesmente do nada ele deu um erro so não fez o rollback oque me leva a pensar que talvez seja algo mal usado da minha parte… consequencias de ter o código do jeito que esta alguem arrisca dizer?

exception lançada…

21/02/2016 09:38:24:Serviço iniciou uma sincronização
21/02/2016 09:38:25:Serviço concluiu com exito a sincronização
21/02/2016 09:39:26:Serviço iniciou uma sincronização
21/02/2016 09:39:26:Serviço concluiu com exito a sincronização
21/02/2016 09:40:27:Serviço iniciou uma sincronização
21/02/2016 09:40:27:Serviço concluiu com exito a sincronização
21/02/2016 09:41:28:Serviço iniciou uma sincronização
21/02/2016 09:41:29:Serviço concluiu com exito a sincronização
21/02/2016 09:42:30:Serviço iniciou uma sincronização
21/02/2016 09:42:30:Serviço concluiu com exito a sincronização
21/02/2016 09:43:31:Serviço iniciou uma sincronização
21/02/2016 09:43:32:Serviço concluiu com exito a sincronização
21/02/2016 09:44:33:Serviço iniciou uma sincronização
21/02/2016 09:44:33:Serviço concluiu com exito a sincronização
21/02/2016 09:45:34:Serviço iniciou uma sincronização
21/02/2016 09:45:34:Serviço concluiu com exito a sincronização
21/02/2016 09:46:35:Serviço iniciou uma sincronização
21/02/2016 09:55:12:Serviço falhou na sincronizacao
21/02/2016 09:55:12:Mensagem de erro: Transaction not successfully started
21/02/2016 09:55:13:StackTrace: at FusionCore.PdvSincronizador.Sync.Sincronizador.SincronizarTudo() in C:\Users\Roberto\Documents\Projetos\Fusion\FusionCore\PdvSincronizador\Sync\Sincronizador.cs:line 79
at FusionSincronizador.Core.ServicoSincronizadorMain.ExecutarSincronizacao() in C:\Users\Roberto\Documents\Projetos\Fusion\PdvSincronizador\Core\ServicoSincronizadorMain.cs:line 22
21/02/2016 09:55:13:— Inner Exception —
21/02/2016 09:55:13:Mensagem de erro:Transaction not successfully started
21/02/2016 09:55:13:StackTrace: at FusionCore.PdvSincronizador.Sync.Sincronizador.RealizarSincronizacao(ISincronizacao sincronizacao) in C:\Users\Roberto\Documents\Projetos\Fusion\FusionCore\PdvSincronizador\Sync\Sincronizador.cs:line 31
at FusionCore.PdvSincronizador.Sync.Sincronizador.SincronizarTudo() in C:\Users\Roberto\Documents\Projetos\Fusion\FusionCore\PdvSincronizador\Sync\Sincronizador.cs:line 68
21/02/2016 09:55:13:— Inner Exception —
21/02/2016 09:55:13:Mensagem de erro:Transaction not successfully started
21/02/2016 09:55:13:StackTrace: at NHibernate.Transaction.AdoTransaction.CheckBegun()
at NHibernate.Transaction.AdoTransaction.Rollback()
at FusionCore.PdvSincronizador.Sync.Estrategia.EnviarVendasEcf.<>c__DisplayClass3_0.b__0(VendaEcfDt vendaPdv) in C:\Users\Roberto\Documents\Projetos\Fusion\FusionCore\PdvSincronizador\Sync\Estrategia\EnviarVendasEcf.cs:line 65
at NHibernate.Util.EnumerableExtensions.ForEach[T](IEnumerable1 query, Action1 method)
at FusionCore.PdvSincronizador.Sync.Estrategia.EnviarVendasEcf.Sincronizar(DateTime ultimaSincronizacao) in C:\Users\Roberto\Documents\Projetos\Fusion\FusionCore\PdvSincronizador\Sync\Estrategia\EnviarVendasEcf.cs:line 30
at FusionCore.PdvSincronizador.Sync.Sincronizador.RealizarSincronizacao(ISincronizacao sincronizacao) in C:\Users\Roberto\Documents\Projetos\Fusion\FusionCore\PdvSincronizador\Sync\Sincronizador.cs:line 25

oque acontece… se ele tivesse efetuado o rollback , e fizesse a sincronização novamente ele funcionaria perfeito sem erros na proxima sincronização… dai e onde tiro conclusão que tem algo relacionado ao nhibernate, uma configuração talvez ou sei lá hehe se alguém poder ajudar =D

Criado 24 de fevereiro de 2016
Respostas 0
Participantes 1