首页 > 解决方案 > 如何验证 TransactionScope 是否适用于 MySQL?

问题描述

我想添加读取未提交的隔离级别。我知道可以使用 SQL 语句。但我想尝试使用 TransactionScope,但我尝试了但没有在 MySQL 常规日志上获得任何隔离语句。问题 1 transactionscope 类是否适用于 MySQL。如果是,那么如何验证。

标签: c#mysqlisolation-levelread-uncommittedsystem.transactions

解决方案


我想添加读取未提交的隔离级别。我知道可以使用 SQL 语句。

执行此操作的“标准”方法是使用MySqlConnection.BeginTransactionAPI:

using (var transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
{
    // do stuff
    transaction.Commit();
}

transactionscope 类是否与 MySQL 一起使用

是的,MySQL Connector/NET 可以支持TransactionScope,但不支持分布式事务。连接器/NET 不支持带有TransactionScope.

如果你想使用TransactionScope,那么 MySQL Connector/NET 应该继承它的隔离级别:

var txOptions = new System.Transactions.TransactionOptions();
txOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;

using(var transaction = new TransactionScope(TransactionScopeOption.Required, txOptions))
using (var connection = new MySqlConnection("... connection string ..."))
{
    connection.Open();
    // ...
    transaction.Complete();
}

如果您需要支持真正的分布式事务TransactionScope,则切换到MySqlConnector作为您的 ADO.NET 驱动程序。与 Connector/NET 不同,它完全支持分布式事务


推荐阅读