【问题标题】:Have Dapper assign DateTimes as UTC, Date as Local让 Dapper 将 DateTimes 分配为 UTC,将 Date 分配为 Local
【发布时间】:2021-02-06 18:27:12
【问题描述】:

关于如何have Dapper assign all DateTimes coming back from a query as Utc 有很多故事。

但是,当我们不关心事件的时间(例如,“截止日期”)时,我的数据库实际上使用了 Date 数据类型。不幸的是,这在 C# 中被转换为 UTC DateTime。这会对日期选择器 UI 造成一些破坏,这对于跨时区的用户来说似乎有奇怪的行为。

Dapper 中是否有一种机制可以捕获 Date 字段何时转换为 DateTime 并以不同方式设置 DateTimeKind?或者强制特定的 TypeHandler 用于某些列?

【问题讨论】:

    标签: c# sql-server datetime dapper


    【解决方案1】:

    你可以做你想做的事,但要注意。你可以创建一个自定义的 TypeHandler,但是因为你要在 C# 中映射的类将是一个 DateTime dapper 已经有它自己的处理。

    在旧版本上没有办法替换那些(我根据经验知道,我不得不修改 dapper,因为我遇到了非常相似的情况)但是现在您可以使用 SqlMapper.RemoveTypeMap 删除映射,因此您可以删除 DateTime映射并使用您的自定义类型处理程序。

    警告:所有的 DateTimes 都将由您的类型处理程序处理,您必须在内部确定您要反序列化的是 Date 还是 DateTime 并为两者应用不同的逻辑,这可能会很棘手你会收到一个object,它已经是一个DateTime

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 2012-09-12
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2019-09-05
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多