Я пытался заставить 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? Может я что-то упускаю?
Спасибо!