public void IniciarTransacao()
 {
     if (EmTransacao)
     {
         throw new TransacaoJaIniciadaException();
     }
     ExecutarEventoTransacao(AntesIniciarTransacao);
     _transacaoFake = new TransacaoFake(CriarConexaoSemTransacao());
     _transacaoFake.IniciarTransacao();
     ExecutarEventoTransacao(DepoisIniciarTransacao);
 }
 public ITransacao IniciarTransacao()
 {
     if (_transacaoExterna || EmTransacao)
     {
         throw new TransacaoJaIniciadaException();
     }
     try
     {
         ExecutarEventoTransacao(AntesIniciarTransacao);
         _transacaoFake = new TransacaoFake(CriarConexaoSemTransacao());
         _transacaoFake.DepoisLimparTransacao += DepoisLimparTransacao;
         return(_transacaoFake);
     }
     finally
     {
         ExecutarEventoTransacao(DepoisIniciarTransacao);
     }
 }
 private void LimparTransacao()
 {
     _transacaoFake.Dispose();
     _transacaoFake = null;
 }
 private void DepoisLimparTransacao(object sender)
 {
     _transacaoFake.DepoisLimparTransacao -= DepoisLimparTransacao;
     _transacaoFake.Dispose();
     _transacaoFake = null;
 }
 public ConexaoFake(IDbTransaction transacao) : this()
 {
     _transacaoFake    = new TransacaoFake(transacao);
     _transacaoExterna = true;
 }