代码之家  ›  专栏  ›  技术社区  ›  Brad Robinson

mysql connector/net-支持mono下的事务

  •  0
  • Brad Robinson  · 技术社区  · 14 年前

    有人知道如何让mysql事务在mono下工作吗?

    我使用的是mysql connector/net(通过subsonic 3),它在Microsoft.net下工作得很好。不过,最近我在Ubuntu上试着用mono运行同一个站点,它几乎可以工作——只是我似乎无法让事务工作。

    阅读Mono/MySQL站点,并不清楚支持什么和不支持什么。

    最初的问题是调用堆栈的NotImplementedExchination,如下所示:

    [System.NotImplementedException]: The requested feature is not implemented.
    
    at MySql.Data.MySqlClient.MySqlConnection.EnlistTransaction (System.Transactions.Transaction) <0x00181> 
    at MySql.Data.MySqlClient.MySqlConnection.Open () <0x00381> 
    at SubSonic.DataProviders.DbDataProvider.CreateConnection (string) <0x00059> 
    at SubSonic.DataProviders.DbDataProvider.CreateConnection () <0x00015>
    

    在MySQL站点上有一些提到这一点,它似乎指向Mono不支持使事务工作所需的基础设施。还有一条评论说,当使用CommittableTransaction而不是TransactionScope时,事务可以正常工作。所以我试过了,但也有同样的例外。

    MySQL网站上的另一条评论建议使用 MONO 建立选项。我试过了,这个网站现在可以运行了,但是没有使用事务——它们只是被禁用了。真的?

    我发现很难相信交易不能在这种环境下工作,但找不到一个有效的例子。

    Mono 2.6.7,MySQL连接/NET 6.3.4,Subsonic 3,Ubuntu 10.10

    2 回复  |  直到 12 年前
        1
  •  0
  •   Brad Robinson    14 年前

    明白了。交易范围似乎不起作用。还原回dbconnection.beginTransaction可以正常工作。我在这里写下了如何在亚音速下完成它: http://www.toptensoftware.com/blog/posts/18/using-transactions-with-mono-mysql-and-subsonic

        2
  •  0
  •   michij83    12 年前

    我在Mono V.2.10.9和 mysqlconnector V.6.6.5和6.7.2测试版,我没能找到解决这个问题的方法,但现在我发现了。

    首先我得到了 MySQL连接器 并将它们添加到我的项目文件夹中。我以为如果我用mono直接编译连接器它会工作,但它不工作。 然后我跨过代码,发现在文件的第530行有以下代码行 Connection.cs mysql.data项目:

    #if !MONO && !CF && !RT
      Console.WriteLine("### Should not be here... ###");
      if (Transaction.Current != null && Settings.AutoEnlist)
        EnlistTransaction(Transaction.Current);
    #endif
    

    这个 Console.WriteLine 是我添加的,以尝试它是否也会出现,如果我运行我的单声道应用程序,它出现。所以我把这句话说了出来,然后所有的事情都在这个时候开始工作。

    然而,真正的解决方案不应该是注释掉一些代码行。 为了解决这个问题,你必须定义“mono”符号。 如果您使用的是MonoDevelop,只需右键单击项目mysql.data并选择编译器部分。在那里你会发现一个带有“定义符号”标签或类似标签的文本框。只需将新符号“mono”添加到此文本框中。