Tenho uma consulta de leitura que executo dentro de uma transação para que possa especificar o nível de isolamento. Assim que a consulta for concluída, o que devo fazer?
- Confirme a transação
- Reverter a transação
- Não faça nada (o que fará com que a transação seja revertida no final do bloco de uso)
Quais são as implicações de fazer cada um?
using (IDbConnection connection = ConnectionFactory.CreateConnection())
{
using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
{
using (IDbCommand command = connection.CreateCommand())
{
command.Transaction = transaction;
command.CommandText = "SELECT * FROM SomeTable";
using (IDataReader reader = command.ExecuteReader())
{
// Read the results
}
}
// To commit, or not to commit?
}
}
EDITAR: A questão não é se uma transação deve ser usada ou se existem outras maneiras de definir o nível da transação. A questão é se faz alguma diferença que uma transação que não modifica nada seja confirmada ou revertida. Existe uma diferença de desempenho? Isso afeta outras conexões? Alguma outra diferença?