2014-01-22 17 views
1

Subsonic 프로젝트를 PetaPoco로 이전 중입니다. Subsonic이 데이터베이스에서 DateTime 열을 가져 오면 DateTime을 DateTimeKind.Unspecified로 반환합니다. PetaPoco가 POCO를 수화하면 DateTimes가 UTC로 설정됩니다.PetaPoco를 구성하여 DateTimeKind 유형이 UTC 대신 Unspecified 인 DateTimes를 만드는 방법은 무엇입니까?

TopTen 소프트웨어의 웹 사이트는 실제로이 정확한 문제를 언급 블로그 게시물이 있습니다 http://www.toptensoftware.com/Articles/84/PetaPoco-Value-Conversions-and-UTC-Times

을하지만 설명 된 솔루션을 알리는 주석은 쓸모가있다, 그리고 매퍼를 언급 다른 기사에 대한 링크. 이 문제를 해결하기 위해 내 솔루션에 매퍼를 추가하는 방법을 알 수 없습니다.

답변

1

이 속성을 POCO 객체의 DateTime 속성에 추가하면 DateTimeKind가 UTC로 설정됩니다 (아무런 변환도하지 않습니다).

[Column(ForceToUtc=true)] 

를 찾기 위해 소스를 통해 발굴했다이

UTC의 실제 변환을 수행하기 위해, 나는 PetaPoco 수정 :

PetaPoco.cs - LN 3738

변경이 :

return delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); }; 

대상 :

return delegate(object src) { return new DateTime(((DateTime)src).ToUniversalTime().Ticks, DateTimeKind.Utc); }; 

반대쪽에 물어 보았다는 사실을 깨달았습니다. 적절한 UTC 날짜를 반환하기 위해 이러한 변경 작업을 수행해야했습니다. 다음 코드와 반대 방향으로 PetaPoco를 수정할 수 있습니다.

return delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Unspecified); };