Dapper를 사용하여 oracle에서 시간 오프셋을 읽는 방법

c# dapper oracle timezone

문제

데이터가 Oracle TIMESTAMP TIME ZONE 열에 저장되어 있고 이제 Dapper를 사용하여 C # DateTimeOffset 변수로 다시 읽으려고합니다. 문제는 dapper가 데이터베이스의 오프셋 값을 무시하고 항상 내 변수를 환경의 현재 오프셋으로 채 웁니다.

데이터베이스에서 오프셋 값을 인식하도록 dapper를 얻는 간단한 방법이 있습니까?

기본적으로 나는이 선을 따라 뭔가를보고 싶다.

var input=new DateTimeOffset(2016, 3, 15, 14, 30, 0, TimeSpan.Zero);
DateTimeOffset output;
using(var connection=new OracleConnection(QueryConnectionString)) {
    output=connection.ExecuteScalar<DateTimeOffset>("Select to_timestamp_tz('"+input.ToString("yyyy-MM-dd HH:mm zzz")+"', 'YYYY-MM-DD HH24:MI TZH:TZM') From DUAL");
}
Assert.AreEqual(input, output);

작성된 것처럼 잘못된 캐스트 예외가 발생하면, dapper가이를 DateTime으로 읽은 다음 오프셋 값을 무시하고 DateTimeOffset으로 캐스팅하려고 시도합니다.

테이블을 쿼리하고 이러한 형식으로 정의 된 클래스 개체를 채우는 코드는 오류를 발생시키지 않지만 개체 인스턴스를 데이터베이스의 값이 아니라 로컬 오프셋으로 채 웁니다. 2016-03-15 14:30 +0 대신 2016-03-15 14:30 -5 끝날 것입니다. 위의 입력 값으로 작업하는 경우.

인기 답변

그래서 나는 다른 사람들이이 질문을보고 있으며 직접적인 대답이없는 동안 나는 우리가 사용하고있는 일을 공유 할 것이라고 생각했다.

면책 조항 : 이것은 약간의 진흙이며, 나는 훨씬 더 깨끗한 접근법을 선호 하겠지만, 효과적입니다.

본질적으로 우리가 한 일은 TimeStamp With Timezone 열을 select 문에서 형식화 된 문자열로 변환하는 것이 었습니다. C # 클래스에서는 동일한 형식을 사용하여 DateTimeOffset의 문자열 표현 인 속성을 추가했습니다. 그런 다음 쿼리에서 별칭을 사용하여 Dapper가 문자열 속성에 값을 채웠는지 확인합니다.이 속성의 설정자는 DateTimeOffset으로 구문 분석하고 원래 속성을 설정합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.