views:

23

answers:

1

Does anyone know how to get MySQL transactions working under Mono?

I'm using MySQL Connector/NET (via Subsonic 3) and it works perfectly under Microsoft .NET. Recently however I tried running the same site under Mono on Ubuntu and it almost works - except I can't seem to get transactions working.

Reading around the Mono/MySQL sites it's not exactly clear what is and isn't supported.

The original problem is a NotImplementedExcetion with call stack like this:

[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>

There's a few mentions of this on the MySQL site which seem to point to Mono not supporting the required infrastructure to make transactions work. There's also a comment that transactions work fine when using CommittableTransaction rather than TransactionScope. So I tried that, but got the same exception.

Another comment on the MySQL site suggested rebuilding the MySQL data provider with the MONO build option. Which I tried and the site now works, but transactions aren't being used - they've been simply disabled. Really?

I find it hard to believe that transactions can't be made to work in this environment, but can't find a working example.

Mono 2.6.7, MySQL Connection/NET 6.3.4, Subsonic 3, Ubuntu 10.10

A: 

Figured it out. It's TransactionScope that doesn't seem to work. Reverting back to DbConnection.BeginTransaction works fine. I've written up how to do it under Subsonic here: http://www.toptensoftware.com/blog/posts/18/using-transactions-with-mono-mysql-and-subsonic

cantabilesoftware