17

TransactionScope の推奨される使用法と同じように機能するコードがいくつかありますが、アンビエント トランザクションではなくアンビエント接続があります。

既存の接続で TransactionScope オブジェクトを使用する方法はありますか、またはこの目的のために .Net フレームワークに代替手段がありますか?

4

3 に答える 3

32

実際、1つの方法があります。

connection.EnlistTransaction(Transaction.Current)

それは機能し、必要でない場合はトランザクションを分散に促進しません(ドキュメントに記載されている内容とは異なります)

HTH

于 2010-07-01T16:11:58.683 に答える
5

接続を 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;

    ...
    ...

}
于 2009-06-01T10:55:20.480 に答える
2

さらに調査した結果、私の質問に対する答えは次のようになりました。

いいえ、TransactionScopeオブジェクトがインスタンス化された後に接続を開く必要があります。

于 2009-06-10T08:57:15.040 に答える