我有一个数据库类,其方法如下所示。两者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
在构造函数中指定,但没有帮助。我还尝试在每个事务范围之前显式打开一个连接,但仍然没有成功。
我想要的是这样的:
- 如果我一个
bar
人打电话,应该有一笔交易。 - 如果我打电话
foo
(反过来打电话bar
),应该有一笔交易。
问:我是否面临限制MySQL .NET Connector
或我做错了什么?
编辑:确切的错误是:该操作对事务状态无效。
所以,一旦我调用Open()
连接,交易就会退出......