私はnpgsql用の新しいNodatimeプラグインを試しており、その結果をZonedDateTimeにマッピングする際に問題があります。Dapper使用NodaTime NpgsqlプラグインのZonedDateTimeマッピング
raw 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 "即時にプロパティが正常に動作しています。
Dapperにnpgsql Nodatimeプラグインが提供するZonedDateTimeマッピングを使用する方法はありますか?
あなたはすでにこのようなプロジェクトを始めたことは素晴らしいことです。他のタイプのようにZonedDateTimeHandlerを実装しようとしましたが、遠くには届きませんでした。あなたはそれを見ることができます。(https://gist.github.com/mibiio/1b4af21987695312d973d97c0b79701b)NpgsqlがSqlMapperからタイプインパクトに影響を与える方法を見つけられませんでした。まだInstantを返します。私が動作すると思ったもう一つの方法は、SqlMapperでInstant - > ZonedDateTime変換を行うことですが、基盤となるNpgsqlConnectionへのアクセスが必要です(connection.Timezone)。 – mibiio
ええ、私は昨晩それを数時間過ごしました。ポストグルの準備が整う前に、たくさんの作業が必要です。現時点ではSQL Server固有のものでもあります。この分野でもっとやります。私がそれを働かせる前に他の誰かがこれについて良いアイデアを持っている場合に備えて、質問を開いたままにしておきなさい。 :) –