Dapper micro ORM, agnóstico de base de datos y tipo MySql Guid

c# dapper mysql orm sqlite

Pregunta

Estoy experimentando Dapper en un proyecto de mascotas. Estoy usando SQLite para ejecutar todas las pruebas y MySql para "producción". Sin embargo, no estoy seguro de cómo usar mejor Dapper para manejar la situación agnóstica de la base de datos.

El problema particular que estoy teniendo es con MySql que no admite el tipo Guid para la clave principal, por lo tanto, estoy usando varchar (40) como tipo (SQLite admite un identificador único que es un guid). Así que aquí viene el problema si tengo un repositorio genérico como el siguiente me metería en problemas al tratar de seleccionar desde la base de datos MySql. Debido a que el tipo de propiedad Id es Guid y Dapper lanzará " Error al analizar la columna 10 " porque el tipo varchar no coincide con el tipo de guía.

Si cambio la propiedad Id de guid a int, entonces el sql en bruto dentro de GetById sería aún más complicado, lo que no estoy seguro de cómo escribir siquiera. Será algo así como: 1. iniciar la transacción, 2. insertar, 3. seleccionar la última identificación insertada y devolverla. Entonces, ¿voy a ir si el tipo de base de datos es mysql, luego uso last_insert_id , o si es sqlite entonces use last_insert_rowid ? Porque la sintaxis RAW cruda sería bastante diferente de la base de datos a la base de datos ...

public IEnumerable<T> GetById(Guid id) //convention: Id is always of type Guid.
{
  return UnitOfWork.DbConnection.Query<T>(
      string.Format(
        "select * from {0} where Id = @Id", typeof (T).Name), new {Id = id});
}

Otros ejemplos serían limitar el número de filas devueltas (especialmente para paginación) y así sucesivamente. Entonces, ¿cómo voy a escribir las consultas SQL sql independientes de la base de datos con Dapper? Y tal vez en mi situación Dapper no es adecuado? Tal vez debería usar el mismo NHibernate viejo aquí. ¿Alguna sugerencia? ¿Lo estoy haciendo mal? ¡Gracias!

Respuesta popular

Intenta usar CHAR (36) como el tipo de datos para la clave primaria en MySQL, esto se transalió a Guid mediante el Conector MySQl - Estoy usando la versión 6.3.4 del conector MySQL. Funciona con Dapper también.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué