Dapper utiliza el mapeo ZonedDateTime del complemento NodaTime Npgsql

dapper nodatime npgsql

Pregunta

Estoy probando el nuevo complemento Nodatime para npgsql y tengo un problema asignando el resultado a un ZonedDateTime.

Con npgsql en bruto, puedo recuperar un valor timestamptz y tenerlo asignado a Instant o ZonedDateTime.

NpgsqlConnection.GlobalTypeMapper.UseNodatime();
using (var connection = new NpgsqlConnection("connection_string"))
{
    connection.Open();

    var command = new NpgsqlCommand("set time zone 'Europe/Vienna'; select now();", connection);

    var reader = command.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(reader.GetValue(0));  // by default the npgsql Nodatime plugin maps timestamptz to Instant
        Console.WriteLine(reader.GetFieldValue<ZonedDateTime>(0)); // mapping to ZonedDateTime
    }

}

Ahora estoy tratando de hacer que la asignación ZonedDateTime funcione con Dapper:

public class DapperTest 
{
    public ZonedDateTime DapperTime { get; set;}
}
NpgsqlConnection.GlobalTypeMapper.UseNodatime();
using (var connection = new NpgsqlConnection("connection_string"))
{

    connection.Open();

    var d = connection.Query<DapperTest>("set time zone 'Europe/Vienna'; select now() as dappertime;").First();

    Console.WriteLine(d);

}

Con este código, recibo una excepción:

Error al analizar la columna 0 (dappertime = 2017-10-30T12: 08: 43Z - Object)

Pero cuando cambio la propiedad "DapperTime" a Instant, funciona bien.

¿Hay alguna manera de forzar a Dapper a usar la asignación ZonedDateTime proporcionada por el plugin npgsql Nodatime?

Respuesta popular

Dapper admite el concepto de "manejadores de tipos" para convertir a / de tipos que no reconoce. En este caso, deberá registrar una clase que implemente SqlMapper.TypeHandler<ZonedDateTime> .

Ya he hecho esto para muchos otros tipos de Noda Time en mi biblioteca Dapper-NodaTime . Lamentamos que aún no sea compatible con ZonedDateTime . Analizaré cómo agregarlo, teniendo en cuenta el uso de npgsql que demostró. (También acepto gustosamente una solicitud de extracció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é