Usando Dapper-dot-net, ¿cómo mapeo la columna SQL Time a un tipo .Net?

.net dapper tsql

Pregunta

Tengo una base de datos existente que usa el tipo SQL time(7) , que no se asigna directamente a un tipo .Net.

Pregunta: Usando Dapper, ¿cómo mapeo una columna de time SQL a un tipo .Net?

Problema: cuando intento asignar implícitamente una columna de time(7) SQL time(7) a DateTime con Dapper-dot-net, obtengo la siguiente excepción:

Se produjo una excepción del tipo 'System.Data.DataException' en Dapper.dll pero no se manejó en el código de usuario

Información adicional: Error al analizar la columna 5 (CheckInTime = 08: 54: 43.1470000 - Object)

Supuse que se correlacionaría con DateTime automáticamente, pero no parece que lo haga

Respuesta popular

He tenido cierto éxito mapeando columnas SQL time (7) a System.TimeSpan .

Como señaló Dan, un TimeSpan es "semánticamente" menos apropiado si su intención es representar una hora del día.

Pero creo que, técnicamente, no hay pérdida de información desde Time (7) a TimeSpan, por lo que los datos están ahí, y es una cuestión de significado.

Una de las formas que he usado para aliviar la fealdad es utilizar una propiedad privada de TimeSpan solo por el simple hecho de consultar y exponer los datos en una propiedad pública de tipo personalizado.

Prefiero eso sobre el uso de un DateTime en combinación con la llamada a CONVERT() en el SQL, porque incluso con el DateTime todavía tiene una representación "imperfecta" de sus datos (la parte de la fecha es falsa) y usted introduce fealdad en el SQL también.

Pero, en este punto, creo que se puede considerar una cuestión de preferencia personal.



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é