私は、推奨されるTransactionScopeの使用のように機能するが、周囲トランザクションではなく周囲接続を持つコードをいくつか持っています。TransactionScopeを既存の接続で使用する方法はありますか?
既存の接続でTransactionScopeオブジェクトを使用する方法はありますか、またはこの目的のために.Netフレームワークに代替手段がありますか?
私は、推奨されるTransactionScopeの使用のように機能するが、周囲トランザクションではなく周囲接続を持つコードをいくつか持っています。TransactionScopeを既存の接続で使用する方法はありますか?
既存の接続でTransactionScopeオブジェクトを使用する方法はありますか、またはこの目的のために.Netフレームワークに代替手段がありますか?
実際には1つの方法があります。
connection.EnlistTransaction(Transaction.Current)
は、それが動作し、それが必要でない場合は、分散にトランザクションを促進doesntの(逆にどのような文書は述べています)
HTH
TransactionScopeへの接続を登録するには、接続文字列に'Enlist=true'
を指定し、そのTransactionScopeオブジェクトのスコープ内で接続を開く必要があります。
SqlConnection.BeginTransaction
は、既存の接続で使用できます。
更新:あなたはこのようBeginTransaction
を使用することができます。より多くの研究の後
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
// Start a local transaction.
transaction = connection.BeginTransaction("SampleTransaction");
// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;
...
...
}
、私の質問への答えはであることが判明:
いいえ、接続の後に開かれる必要がありますTransactionScopeオブジェクトがインスタンス化されます。
事は、接続がTransactionScopeのインスタンス化の前に開かれています。したがって、私の質問の理由。 –
@Mitch、connection.BeginTransaction( "SampleTransaction")は、どのようなシナリオでも分散トランザクション(DTC)に昇格しませんか?もしそうなら、そのシナリオは何ですか? – Baig