/ / Linq mit Mysql und Mono spielen lassen - c #, mysql, linq, mono

Es ist möglich, dass Linq mit Mysql und Mono gut spielt. - c #, mysql, linq, mono

Ich habe versucht, Linq dazu zu bringen, mit Mysql unter Ubuntu zusammenzuarbeiten, wobei ich die Mono-Version in den Repositorys (2.10.5) verwende und ich bekomme nur Kopfschmerzen.

Zunächst musste ich den MySQL-Provider ändernsqlmetal.exe.config Da es standardmäßig auf eine alte und veraltete Version gesetzt war, konnte ich es dazu bringen, den MySQL-Connector einzustellen, den ich auf diesem Rechner (von den Repositorys) als Provider für sqlmetal installiert habe. Ich habe den DataContext mit sqlmetal für meine Zieldatenbank generiert, und das schien zu funktionieren, aber ich bin mir nicht ganz sicher.

Nach dem Generieren des DataContext habe ich ein neues erstelltProjekt auf Mono-Entwicklung, nur um dies zu testen, zunächst versuchte ich, eine einfache MysqlConenction zu verwenden und zu überprüfen, ob der Connector ordnungsgemäß funktioniert. Ich musste die Connector-Baugruppe dem Projekt hinzufügen. Dann habe ich versucht, mit dem DataContext eine Verbindung mit diesem Code herzustellen:

    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);
}
}
}
}

Dieser Code schlägt fehl. Es scheint, dass Linq schlechten SQL-Code für MySQL generiert. Zumindest die Ausnahme, die es wirft, scheint zu sagen:

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

Weiß jemand, ob es möglich ist, mit Linq und Mono eine Verbindung zu MySQL herzustellen? Gibt es etwas, was mir fehlt?

Vielen Dank!

Antworten:

5 für die Antwort № 1

Ich weiß nicht, warum jeder denkt, dass LINQ to SQL nicht mit Mono funktioniert.
Mono entwickelt sich regelmäßig: Bis heute funktioniert LINQ to SQL gut mit Mono und MySQL (und ich verwende es erfolgreich mit PostgreSQL).

In Ihrem Code gibt es einen kleinen Fehler: Sie geben den DbLinqProvider nicht in der Verbindungszeichenfolge an. Dies ist erforderlich, um SQL-Code für MySQL zu erzeugen.

In diesem Fall ist der generierte SQL-Code spezifisch für SQL Server:

"FROM [test].[Users]"

gewesen sein sollte

"FROM `test`.`Users`"

Versuchen Sie, "DbLinqProvider = MySql" in Ihre Verbindungszeichenfolge einzufügen. Dies sollte Ihr Problem beheben.
Sehen : http://www.mono-project.com/Release_Notes_Mono_2.6#LINQ_to_SQL

Sie sollten wissen, dass die Mono / DbLinq-Implementierung noch unvollständig ist (beispielsweise werden kompilierte Abfragen nicht unterstützt), aber mehr als genug, um eine vollständige Anwendung zu entwickeln.