以下に示すようなメソッドを持つデータベースクラスがあります。fooとは両方ともbarオールオアナッシング操作です。したがって、トランザクションの必要性。MySQL5.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()、トランザクションは終了します...