1
resposta

Controle de transação?

Professor, estou com o seguinte código, mas posso confiar no Entity para gerenciar a transação?

public async Task<IActionResult> Salvar(IVeiculo veiculo)
        {
            var veiculo = VeiculoBuilder.ConstruirFoguete(veiculo);
            if(veiculo is null)
                return BadRequest();
            await _repoVeiculo.IncluirAsync(veiculo);
//Consideremos que veículo é uma instancia muito complexa , envolvendo //muitas tabelas
            return Ok();
        }

Onde foi parar o StartTransaction? É seguro deixar o gerenciamento da transação para o Entity FrameWork?

try
Transaction.StartTransaction; 
SQL.Text := ´insert into tabela1 (cod, desc) values (1, ´´teste1´´)´;
ExecQuery;
SQL.Text := ´insert into tabela1 (cod, desc) values (2, ´´teste2´´)´;
ExecQuery;
Transaction.Commit; 
except
Transaction.Rollback; 
end;

Caso seja necessário, poderia demonstrar um código de exemplo?

Abs,

1 resposta

Eduardo, bom dia.

O método SaveChanges() por padrão executa os comandos SQL dentro de uma transação. Então se você está chamando o SaveChanges() apenas uma vez para o veículo todos os comandos SQL que atualizam os objetos relacionados ao veículo estarão na mesma transação.

Agora se ainda estiver desconfiado rsrs, você pode assumir o controle da transação fazendo context.Database.BeginTransaction() e dando o commit/rollback conforme necessidade.

Mais informações aqui.

Espero ter ajudado!