InvalidCastException cuando se usa Dapper para asignar un campo de fecha desde MySql

.net c# dapper mysql

Pregunta

Estoy empezando a usar Dapper para acceder a una base de datos MySql y parece que tengo un problema al tratar con campos de fecha. Cada vez que trato de mapear un campo de tipo Fecha de MySql recibo un lanzamiento inválido. Parece que el conector MySql está devolviendo un tipo de MySqlDateTime que hace que Dapper lo emita a un objeto en lugar de una fecha. Aquí está el código relevante

Definición de propiedad en mi modelo

public DateTime PickupDate { get; set; }

Definición de campo en MySql

PickupDate DATE

Excepción siendo lanzada

System.Data.DataException : Error parsing column 1 (PickupDate= - Object)
----> System.InvalidCastException : Specified cast is not valid.

Sé que debe ser algo que me falta, ¿alguien puede orientarme en la dirección correcta en cuanto a lo que tengo que hacer para tener un mapa de Dapper este campo a un tipo de datos DateTime?

Respuesta aceptada

La respuesta fue establecer AllowZeroDateTime en falso en la cadena de conexión. Desde el documento de opciones de cadenas de conexión de MySQL, aquí .

Si se establece en True, MySqlDataReader.GetValue () devuelve un objeto MySqlDateTime para columnas de fecha o de fecha y hora que tienen valores no permitidos, como valores de fecha y hora cero, y un objeto System.DateTime para valores válidos. Si se establece en False (la configuración predeterminada), provoca que se devuelva un objeto System.DateTime para todos los valores válidos y que se genere una excepción para los valores no permitidos, como los valores de fecha y hora cero.

Por alguna razón, incluso con una fecha válida, obtenía el tipo MySqlDateTime en lugar de DateTime. Cambiar esto a falso hace que tenga lugar el comportamiento correcto.



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é