以下に示すようなメソッドを持つデータベースクラスがあります。foo
とは両方ともbar
オールオアナッシング操作です。したがって、トランザクションの必要性。MySQL
5.5.21をと一緒に使用していることに注意してくださいMySQL .NET Connector 6.6.4
。
public void foo()
{
using (var transaction = new TransactionScope())
{
// This call yields a 'System.Transactions.TransactionException'
bar();
insertStuff();
transaction.Complete();
}
}
public void bar()
{
using (var transaction = new TransactionScope())
{
insertStuff();
insertStuff();
transaction.Complete();
}
}
private void insertStuff()
{
using (var connection = CreateConnection()) // Using the same connection string!
{
connection.ConnectionString = ConnectionString;
connection.Open();
}
}
コンストラクターで指定しようとしTransactionScopeOption.RequiresNew
ましたが、役に立ちませんでした。また、各トランザクションスコープの前に明示的に接続を開こうとしましたが、それでも成功しませんでした。
私が欲しいのはこれです:
- 私が一人で電話する場合、 1つのトランザクション
bar
があるはずです。 - 私が呼び出すと
foo
(順番に呼び出す)、 1つのトランザクションbar
があるはずです。
Q:制限に直面していますか、MySQL .NET Connector
それとも何か間違ったことをしていますか?
編集:正確なエラーは次のとおりです:操作はトランザクションの状態に対して無効です。
したがって、接続を呼び出すとすぐにOpen()
、トランザクションは終了します...