如何配置PetaPoco创建类型为DateTimeKind.Unspecified而不是UTC的DateTimes?

时间:2014-01-22 14:43:41

标签: orm subsonic petapoco

我正在将一个Subsonic项目迁移到PetaPoco。当Subsonic从数据库中提取DateTime列时,它将DateTime作为DateTimeKind.Unspecified返回。当PetaPoco水合POCO时,它将DateTimes设置为UTC。

TopTen Software的网站实际上有一篇博文提到了这个确切的问题: http://www.toptensoftware.com/Articles/84/PetaPoco-Value-Conversions-and-UTC-Times

但是有一个注释表明所概述的解决方案已经过时,并且链接到另一篇提到映射器的文章。我无法弄清楚如何将mappers添加到我的解决方案中以解决此问题。

1 个答案:

答案 0 :(得分: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); };

To This:

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