Я пробую новый плагин Nodatime для npgsql, и у меня возникла проблема с сопоставлением результата с ZonedDateTime.
С необработанным npgsql я могу получить значение timestamptz и сопоставить его с Instant или 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
}
}
Теперь я пытаюсь заставить сопоставление ZonedDateTime работать с 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);
}
С этим кодом я получаю исключение:
Ошибка синтаксического анализа столбца 0 (dappertime=2017-10-30T12:08:43Z — объект)
Но когда я изменяю свойство «DapperTime» на Instant, оно работает нормально.
Есть ли способ заставить Dapper использовать сопоставление ZonedDateTime, предоставляемое плагином npgsql Nodatime?