2017-10-30 13 views
2

npgsql에 대한 새로운 Nodatime 플러그인을 시험해보고 결과를 ZonedDateTime에 매핑하는 데 문제가 있습니다.Dapper 사용 NodaTime Npgsql 플러그인의 ZonedDateTime 매핑

원시 npgsql을 사용하면 timestamptz 값을 검색하고 Instant 또는 ZonedDateTime에 매핑 할 수 있습니다.

오류 분석 열 0 (dappertime = 나는 예외를 얻을

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); 

} 

이 코드 : 이제

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 매핑을 얻으려고 2017-10-30T12 : 08 : 43Z - 개체)

하지만 "DapperTime "속성 즉시 작동합니다.

Dapper가 npgsql Nodatime 플러그인에서 제공하는 ZonedDateTime 매핑을 사용하도록 강제 할 수 있습니까?

답변

3

Dapper는 인식하지 못하는 형식으로/형식을 변환하는 "형식 처리기"개념을 지원합니다. 이 경우 SqlMapper.TypeHandler<ZonedDateTime>을 구현하는 클래스를 등록해야합니다.

나는 이미 Dapper-NodaTime 라이브러리에있는 다른 여러 가지 노다 시간 유형에 대해이 작업을 수행했습니다. 죄송합니다 아직 ZonedDateTime을 지원하지 않습니다. 여러분이 시연 한 npgsql 사용법을 보면서 추가해 보겠습니다. (기꺼이 풀 요청을 수락합니다.)

+0

이미 이러한 프로젝트를 시작하게되어 매우 기쁩니다. 다른 유형의 경우처럼 ZonedDateTimeHandler를 구현하려고했지만 멀리 가지 않았습니다. 당신은 그것을 볼 수 있습니다. (https://gist.github.com/mibiio/1b4af21987695312d973d97c0b79701b) npgsql이 SqlMapper로부터 typing을 영향을 줄 수있는 방법을 찾지 못했습니다. 여전히 Instant를 반환합니다. 내가 생각할 수있는 또 다른 방법은 Instant -> ZonedDateTime 변환을 SqlMapper에서 수행하는 것이지만 기본 NpgsqlConnection에 대한 액세스 권한이 필요하다 (connection.Timezone). – mibiio

+1

네, 어젯밤에 몇 시간을 보냈습니다. 포스트그레스를 준비하기 전에 많은 작업이 필요합니다. 현재 SQL Server에만 한정되어 있습니다. 이 분야에서 더 많은 일을 할 것입니다. 내가 일하기 전에 다른 사람이 이것에 대해 좋은 생각을 가지고있는 경우에 대비하여 여기에 질문을 열어두고 대답하지 마십시오. :) –