Заставить Linq хорошо работать с Mysql и Mono, возможно ли это?

Я пытался заставить Linq работать с Mysql на Ubuntu, используя версию Mono в репозиториях (2.10.5), и не получил ничего, кроме головной боли.

Прежде всего, мне пришлось изменить MySQL провайдер sqlmetal.exe.config, потому что по умолчанию он был установлен на старую и устаревшую версию, мне удалось заставить его работать, установив MySQL коннектор, который я установил на этой машине (из репозиториев) в качестве провайдера для sqlmetal. Я сгенерировал DataContext с sqlmetal для моей целевой базы данных, и это, кажется, сработало, но я не совсем уверен.

После генерации DataContext я создал новый проект на monodevelop, чтобы проверить это, сначала я попробовал использовать простую MysqlConenction и проверить, что коннектор работает правильно, мне пришлось добавить сборку коннектора в проект, но это нормально, он работал. Затем я попытался подключиться с помощью DataContext, используя следующий код:

    using System;
    using System.Linq;
    using System.Data.Linq;
    using MySql.Data.MySqlClient;

    namespace test
    {
            public class test
        {
            public static void Main (String[] args)
            {           
                Test db = new Test (new MySqlConnection("Userid=root;database=test;server=localhost;password=password"));

                foreach(var tr in db.Users)
                {
                    Console.Write(tr.Username);
                }
            }
        }
    }

Этот код не работает. Похоже, Linq генерирует плохой SQL-код для MySQL, по крайней мере, исключение, которое он выбрасывает, говорит об этом:

Unhandled Exception: MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[Id], [Password], [Username]
FROM [test].[Users]' at line 1
  at MySql.Data.MySqlClient.MySqlStream.ReadPacket () [0x00000] in <filename unknown>:0 
  at MySql.Data.MySqlClient.NativeDriver.GetResult (System.Int32& affectedRow, System.Int32& insertedId) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[Id], [Password], [Username]
FROM [test].[Users]' at line 1
  at MySql.Data.MySqlClient.MySqlStream.ReadPacket () [0x00000] in <filename unknown>:0 
  at MySql.Data.MySqlClient.NativeDriver.GetResult (System.Int32& affectedRow, System.Int32& insertedId) [0x00000] in <filename unknown>:0 

Кто-нибудь знает, можно ли подключиться к MySQL с помощью Linq и Mono? Может я что-то упускаю?

Спасибо!

5
задан uorbe001 8 December 2011 в 11:24
поделиться