public bool Transferir(TransferenciaBancariaDTO dadosTransferencia) { try { Transacao.ExecutarEmTransacao(() => { Lancamento lancamento = new Lancamento(dadosTransferencia); ContaCorrente origem = _contaRepositorio.Buscar(dadosTransferencia.ContaOrigem); ContaCorrente destino = _contaRepositorio.Buscar(dadosTransferencia.ContaDestino); if (origem == null || destino == null) { throw new ArgumentNullException(ValidationResource.ContaNaoExistente); } origem.Lancamentos = new List <Lancamento>(); destino.Lancamentos = new List <Lancamento>(); origem.Debitar(dadosTransferencia.Valor); destino.Creditar(dadosTransferencia.Valor); origem.Lancamentos.Add(lancamento); _contaRepositorio.Salvar(origem); _contaRepositorio.Salvar(destino); _lancamentoRepositorio.Adicionar(lancamento); }); return(true); } catch (Exception e) { throw e; } }