none
TRANSAÇÕES NO .NET FRAMEWORK RRS feed

  • Discussão Geral

  • Bom Dia a Todos

    Estou criando uma classe de acesso a dados padrão para uma nova aplicação web e chegou o momento de implementar transações na mesma.

    Até então eu nunca tinha reparado na bagunça que o FrameWork fez para se trabalhar com transações. Por favor, me expliquem se eu estiver errado, mas tenho a seguinte situação.

    3 classes: Um SqlCommand, Uma SqlTRansaction e Uma SqlConnection.

    Na MINHA Opnião, eu associaria a TRansação a conexao e o gerenciamento da transação(Begin,Comit e RollBack) seria feito pela transação ou até mesmo pela conexão(o que na minha opnião seria o ideal, pois facilitaria na hora de fechar a conexao). E todos os comandos que fossem associados a conexão automaticamente estariam dentro da transação.

    Agora no .net eu associo a transação com cada comando criado, e o gerenciamento é feito parte na conexão(Begin transaction) e parte na transação(Comit e RollBack). E ainda a transação não tem um estado(nada que indique que ela foi iniciada), talvez eu consiga descobrir esse estado da transação através do estado da conexão mas não tenho conhecimento disso(Estou trabalhando com o FrameWork 2.0 e alguns estados da conexão "estão reservados para versões futuras do Produto").

    Novamente, se a transação estivesse associada a CONEXÃO essa classe poderia conter uma transação, eliminando a necessidade de cria-la explicitamente. E essa transação só seria ativada quando executassemos um comando como "conexao.beginTran" .


    Por Favor, dêem suas opniões.
    quinta-feira, 17 de setembro de 2009 13:15

Todas as Respostas

  • Eduardo,

      Para resumir a operara: 
      Vc pode criar dois tipos de transação no .NET. A transação explicita e implicita.


    Segue exemplo de um comando com a transação implicita. (Tudo que estiver dentro do using será abortado se a transação não for executada com sucesso) Tudo que eu falo é tudo mesmo. Comandos no banco de dados e até a criação de arquivo no disco.

    Exemplo de transação implicita:
     using(TransactionScope scope = new TransactionScope())
         {
              /* Perform transactional work here */
              SeusMetodos();
              scope.Complete();
         }



    Transação Explicita: (é a que vc citou na pergunta. Passando o transaction para cada command e/ou criar uma pilha de contextos de forma assincrona).

     

    Para ajudar na comprienção segue alguns links:
    Transação Implicita: http://msdn.microsoft.com/en-us/library/ms172152.aspx
    Transação Explicita: http://msdn.microsoft.com/en-us/library/ms172146.aspx


    Espero ter ajudado.

    Tiago Santos
    Líder do Grupo de Usuários Atitude Brasil.Net (www.atitudebrasil.net)
    MSP, MCP
    Blog: http://www.atitudebrasil.net/blogs/tiagosantos


    "Atenção:  Se este poste foi útil. Não deixe de voltar no forum e marca-lo como tal."


    Tiago Novaes (MSP, MCP) tiago.santos@atitudebrasil.net http://www.atitudebrasil.net
    quarta-feira, 23 de setembro de 2009 14:12