Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Classe TransactionScope

 

Publicado: julho de 2016

Faz um bloco de código transacional. Essa classe não pode ser herdada.

Namespace:   System.Transactions
Assembly:  System.Transactions (em System.Transactions.dll)

System.Object
  System.Transactions.TransactionScope

public sealed class TransactionScope : IDisposable

NomeDescrição
System_CAPS_pubmethodTransactionScope()

Inicializa uma nova instância da classe TransactionScope.

System_CAPS_pubmethodTransactionScope(Transaction)

Inicializa uma nova instância de TransactionScope classe e define a transação especificada como a transação de ambiente, de modo que usa o trabalho transacional dentro do escopo desta transação.

System_CAPS_pubmethodTransactionScope(Transaction, TimeSpan)

Inicializa uma nova instância de TransactionScope classe com o valor de tempo limite especificado e define a transação especificada como a transação ambiente, para que essa transação usa o trabalho transacional dentro do escopo.

System_CAPS_pubmethodTransactionScope(Transaction, TimeSpan, EnterpriseServicesInteropOption)

Inicializa uma nova instância de TransactionScope classe com o valor de tempo limite especificado e COM+ requisitos de interoperabilidade e define a transação especificada como a transação ambiente, para que essa transação usa o trabalho transacional dentro do escopo.

System_CAPS_pubmethodTransactionScope(Transaction, TimeSpan, TransactionScopeAsyncFlowOption)

[Com suporte no .NET Framework 4.5.1 e versões posteriores]

Inicializa uma nova instância de TransactionScope classe com o valor de tempo limite especificado e define a transação especificada como a transação ambiente, para que essa transação usa o trabalho transacional dentro do escopo.

System_CAPS_pubmethodTransactionScope(Transaction, TransactionScopeAsyncFlowOption)

[Com suporte no .NET Framework 4.5.1 e versões posteriores]

Inicializa uma nova instância de TransactionScope classe e define a transação especificada como a transação de ambiente, de modo que usa o trabalho transacional dentro do escopo desta transação.

System_CAPS_pubmethodTransactionScope(TransactionScopeAsyncFlowOption)

[Com suporte no .NET Framework 4.5.1 e versões posteriores]

Inicializa uma nova instância de TransactionScope classe com a opção de fluxo assíncrono especificado.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption)

Inicializa uma nova instância de TransactionScope classe com requisitos especificados.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption, TimeSpan)

Inicializa uma nova instância de TransactionScope classe com os requisitos e o valor de tempo limite especificado.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption, TimeSpan, TransactionScopeAsyncFlowOption)

[Com suporte no .NET Framework 4.5.1 e versões posteriores]

Inicializa uma nova instância de TransactionScope classe com o valor de tempo limite especificado, requisitos e opção de fluxo assíncrono.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption, TransactionOptions)

Inicializa uma nova instância de TransactionScope classe com requisitos especificados.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption, TransactionOptions, EnterpriseServicesInteropOption)

Inicializa uma nova instância de TransactionScope classe com o escopo especificado e os requisitos de interoperabilidade COM+ e opções de transação.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption, TransactionOptions, TransactionScopeAsyncFlowOption)

[Com suporte no .NET Framework 4.5.1 e versões posteriores]

Inicializa uma nova instância de TransactionScope classe com a opção de fluxo assíncrono e requisitos especificados.

System_CAPS_pubmethodTransactionScope(TransactionScopeOption, TransactionScopeAsyncFlowOption)

[Com suporte no .NET Framework 4.5.1 e versões posteriores]

Inicializa uma nova instância de TransactionScope classe com a opção de fluxo assíncrono e requisitos especificados.

NomeDescrição
System_CAPS_pubmethodComplete()

Indica que todas as operações dentro do escopo são concluídas com êxito.

System_CAPS_pubmethodDispose()

Termina o escopo da transação.

System_CAPS_pubmethodEquals(Object)

Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)

System_CAPS_pubmethodGetHashCode()

Serve como a função de hash padrão.(Herdado de Object.)

System_CAPS_pubmethodGetType()

Obtém o Type da instância atual.(Herdado de Object.)

System_CAPS_pubmethodToString()

Retorna uma string que representa o objeto atual.(Herdado de Object.)

O System.Transactions infra-estrutura fornece dois um modelo de programação explícito com base no Transaction classe, bem como um modelo de programação implícito usando a TransactionScope classe, em que as transações são automaticamente gerenciadas pela infra-estrutura.

System_CAPS_importantImportante

É recomendável que você crie transações implícitas usando o TransactionScope de classe, para que o contexto de transação ambiente é gerenciado automaticamente para você. Você também deve usar o TransactionScope e DependentTransaction classe para aplicativos que exigem o uso da mesma transação em várias chamadas de função ou várias chamadas de threads. Para obter mais informações sobre esse modelo, consulte o Implementing An Implicit Transaction Using Transaction Scope tópico. Para obter mais informações sobre como escrever um aplicativo transacional, consulte Writing A Transactional Application.

Após instanciar um TransactionScope o new instrução, o Gerenciador de transações determina qual transação para participar. Uma vez determinado, o escopo sempre participa dessa transação. A decisão se baseia em dois fatores: se houver uma transação de ambiente e o valor de TransactionScopeOption parâmetro no construtor. A transação ambiente é a transação que o código é executado no. Você pode obter uma referência para a transação de ambiente chamando estático Current propriedade o Transaction classe. Para obter mais informações sobre como esse parâmetro é usado, consulte a seção "Gerenciamento de fluxo de transação" do Implementing An Implicit Transaction Using Transaction Scope tópico.

Se nenhuma exceção ocorrer dentro do escopo da transação (isto é, entre a inicialização do TransactionScope objeto e a chamada de sua Dispose método), a transação do qual participa o escopo é permitido para continuar. Se uma exceção ocorrer dentro do escopo de transação, a transação na qual ele participa será revertida.

Quando seu aplicativo conclui todo o trabalho que deseja executar em uma transação, você deve chamar o Complete método apenas uma vez para informar o Gerenciador de transações que é aceitável para confirmar a transação. Falha ao chamar esse método anula a transação.

Uma chamada para o Dispose método marca o final do escopo da transação. Exceções que ocorrem depois de chamar esse método podem não afetar a transação.

Se você modificar o valor de Current dentro de um escopo, uma exceção é lançada quando Dispose é chamado. No entanto, no final do escopo, o valor anterior é restaurado. Além disso, se você chamar Dispose em Current dentro de um escopo de transação que criou a transação, a transação é anulada no final do escopo.

O exemplo a seguir demonstra como usar o TransactionScope classe para definir um bloco de código para participar de uma transação.

// This function takes arguments for 2 connection strings and commands to create a transaction 
// involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the 
// transaction is rolled back. To test this code, you can connect to two different databases 
// on the same server by altering the connection string, or to another 3rd party RDBMS by 
// altering the code in the connection2 code block.
static public int CreateTransactionScope(
    string connectString1, string connectString2,
    string commandText1, string commandText2)
{
    // Initialize the return value to zero and create a StringWriter to display results.
    int returnValue = 0;
    System.IO.StringWriter writer = new System.IO.StringWriter();

    try
    {
        // Create the TransactionScope to execute the commands, guaranteeing
        // that both commands can commit or roll back as a single unit of work.
        using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection connection1 = new SqlConnection(connectString1))
            {
                // Opening the connection automatically enlists it in the 
                // TransactionScope as a lightweight transaction.
                connection1.Open();

                // Create the SqlCommand object and execute the first command.
                SqlCommand command1 = new SqlCommand(commandText1, connection1);
                returnValue = command1.ExecuteNonQuery();
                writer.WriteLine("Rows to be affected by command1: {0}", returnValue);

                // If you get here, this means that command1 succeeded. By nesting
                // the using block for connection2 inside that of connection1, you
                // conserve server and network resources as connection2 is opened
                // only when there is a chance that the transaction can commit.   
                using (SqlConnection connection2 = new SqlConnection(connectString2))
                {
                    // The transaction is escalated to a full distributed
                    // transaction when connection2 is opened.
                    connection2.Open();

                    // Execute the second command in the second database.
                    returnValue = 0;
                    SqlCommand command2 = new SqlCommand(commandText2, connection2);
                    returnValue = command2.ExecuteNonQuery();
                    writer.WriteLine("Rows to be affected by command2: {0}", returnValue);
                }
            }

            // The Complete method commits the transaction. If an exception has been thrown,
            // Complete is not  called and the transaction is rolled back.
            scope.Complete();

        }

    }
    catch (TransactionAbortedException ex)
    {
        writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
    }
    catch (ApplicationException ex)
    {
        writer.WriteLine("ApplicationException Message: {0}", ex.Message);
    }

    // Display messages.
    Console.WriteLine(writer.ToString());

    return returnValue;
}

.NET Framework
Disponível desde 2.0

Esse tipo é de Thread de segurança.

Namespace System.Transactions
Implementing An Implicit Transaction Using Transaction Scope

Retornar ao início
Mostrar: