Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 25346|Resposta: 2

[Fonte] Uso do TransactionScope em C#

[Copiar link]
Publicado em 10/04/2017 10:16:25 | | | |
TransactionScope

TransactionScope é uma classe no System.Transactions, que é uma classe que vem com o framework .NET. Se o TransactionScope for liberado sem chamar o método Complete (o TransactionScope implementa a interface IDisposible, o uso de bloco é recomendado), ele considerará a operação como falha e reverterá a execução.
O TransactionScope é uma API útil que gerencia transações ao redor ("ao redor" significa que bancos de dados que suportam TransactionScope podem gerenciar transações automaticamente), e a maioria dos bancos de dados tradicionais suporta essa API, incluindo o próprio MSSQL da Microsoft, é claro.
Se você estiver usando um banco de dados ou algum sistema relacionado a transações que não suporta TransactionScope, ainda pode usar o interceptor, mas terá que modificar seu código para usar uma API adequada que suporte transações (por exemplo, usando a API BeginTransaction para obter a implementação IDbTransactions pelo provedor do banco de dados).



O acima é uma exceção personalizada que eu deliberadamente coloquei para ver se ela pode ser revertida normalmente, e a imagem abaixo mostra execução normal, sem exceções.




Chamar o método Complete do TransactionScope indica que a transação foi executada com sucesso. Claro, se a transação for sempre executada, então ela não é necessária. A razão pela qual existem transações é para resolver o problema da falha em múltiplas operações, e se houver uma falha, ela será revertida.
Porque o . .NET no TransactionScope não há chamada de rollback explícita, e o equivalente mais próximo é usar o método Dispos. Se o TransactionScope for liberado antes que o método Complete seja chamado, então o TransactionScope realiza um rollback. Portanto, uma chamada Dispose precisa ser adicionada à face interceptor de transações para realizar o rollback.


Por fim, anexe o código!


Anexado está o código-fonte:
Turistas, se quiserem ver o conteúdo oculto deste post, por favorResposta






Anterior:A instrução CREATE DATABASE não é permitida em transações de múltiplas instruções
Próximo:Faça com que o OrderBy do Linq suporte campos dinâmicos
 Senhorio| Publicado em 10/04/2017 10:20:30 |
A classe TransactionScope pode ser usada aninhada, e se você quiser usá-la aninhada, precisa especificar o parâmetro TransactionScopeOption no bloco de transação aninhada. O parâmetro padrão é Required.

Quando a TransactionScopeOption da classe aninhada TransactionScope for Required, você pode ver o seguinte resultado: suas transações têm o mesmo ID. Além disso, só é verdadeiro sucesso quando ambos os TransactionScopes estão completos.

Se você definir TransactionScopeOption para RequiresNew, os blocos de transação aninhados e os blocos externos são independentes e não se afetam.

TransactionScopeOption está configurado para Suprimir para cancelar a transação do bloco atual, o que geralmente é raramente usado.
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com