He estado tratando de hacer que Linq trabaje con Mysql en Ubuntu, usando la versión Mono en los repositorios (2.10.5) y no tengo más que dolores de cabeza.Hacer que Linq juegue bien con Mysql y Mono, ¿es posible?
En primer lugar, tuve que modificar el proveedor de MySQL sqlmetal.exe.config porque estaba configurado en una versión antigua y obsoleta de forma predeterminada, logré que funcionara configurando el conector MySQL que he instalado en esta máquina (de los repositorios) como el proveedor de sqlmetal. Genere el DataContext con sqlmetal para mi base de datos de destino, y eso pareció funcionar, pero no estoy del todo seguro.
Después de generar el DataContext creé un nuevo proyecto en monodesarrollo solo para probar esto, al principio traté de usar una MysqlConenction simple y verifiqué que el conector funcionaba correctamente, tuve que agregar el ensamblaje del conector al proyecto, pero está bien , funcionó. Luego trató de conectarse a través de la DataContext utilizando este código:
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);
}
}
}
}
Este código de falla. Parece LINQ está generando mal código SQL para MySQL, al menos la excepción que está lanzando parece decir que:
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
¿Alguien sabe si es posible conectarse a MySQL utilizando LINQ y Mono? ¿Se me escapa algo?
Gracias!
Esta cuestión ya se ha discutido aquí http://stackoverflow.com/questions/42212/how-can-i-use-linq-with-a-mysql-database-on-mono – Eugene
leí esa pregunta , pero es una pregunta de 3 años y pensé que las cosas habrían cambiado ... – uorbe001