以下の方法を検討してください。明示的に完了するまで、TransactionScopeは暗黙的に適用されますか?
DoA()
{
using (TransactionScope scope = new TransactionScope)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonReader();
DoB();
scope.Complete();
}
}
}
DoB()
{
using (TransactionScope scope = new TransactionScope)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonReader();
DoC();
scope.Complete();
}
}
}
DoC()
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonReader();
}
}
我々はDoA()
を呼び出す場合は、SQL Serverに関連するとして、DoA()
のトランザクションのコンテキストでDoB()
とDoC()
の実行で、その後の相互作用を行いますか? DoC()はDoA()
とDoB()
の両方のトランザクションのコンテキストで実行されますか?
(それとも私が何かを誤解ひどくだ?)アンディのコメント当たりに編集
ネストされたトランザクションを取得します:) – DaveShaw
これを制御するオプションがあります。 http://msdn.microsoft.com/en-us/library/ms172152(v=vs.85).aspxの「TransactionScopeOptionを使用したトランザクションフローの管理」を参照してください。 – AaronLS
ネストされたトランザクションに関するさらに詳しい説明は、環境トランザクションに参加する。 – AaronLS