【问题标题】:How to verify TransactionScope works with MySQL?如何验证 TransactionScope 是否适用于 MySQL?
【发布时间】:2019-01-11 18:51:23
【问题描述】:

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

【问题讨论】:

    标签: c# mysql isolation-level read-uncommitted system.transactions


    【解决方案1】:

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

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

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

    transactionscope 类是否适用于 MySQL

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

    如果你想使用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 不同,它是fully supports distributed transactions

    【讨论】:

    • 我很确定你的答案的第一部分,因为我在 Mysql 服务器中以SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 获取一般登录但在 TransactionScope 的情况下,我没有得到任何日志并且我没有分布式事务它只是从单个表中选择记录,我正在使用 MySql.Data 包。你能检查一下日志吗?
    • @Atulya 当我使用上面发布的TransactionScope 代码时,我在常规日志中看到了SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED BEGIN。如果你没有看到这个,我建议你接受这个答案,然后用你的确切代码提出一个新问题,我们可以进一步调查。
    • 好的,我可以这样做,但请务必提及您的包(mysql.data)和 MySQL 版本,以便我可以进一步调查并在需要时发布新的。
    • SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDTransactionScope 和 MySql.Data(又名连接器/NET)一起使用。使用 MySqlConnector,您将在日志中看到 XA START '(guid)',因为 TransactionScope 使用分布式事务。
    • 知道了,但我需要你的 DLL(MySql.Data) 版本和 MySQL 版本。
    猜你喜欢
    • 2021-01-02
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多