C# 让Dapper将日期时间指定为UTC,日期指定为本地

C# 让Dapper将日期时间指定为UTC,日期指定为本地,c#,sql-server,datetime,dapper,C#,Sql Server,Datetime,Dapper,有很多关于如何做的故事 然而,当我们不关心事件的时间(比如“截止日期”)时,我的数据库实际上使用了Date数据类型。不幸的是,这会在C#中转换为UTCDateTime。这对日期选择器UI造成了一些破坏,对于跨时区的用户来说,它们似乎有着奇怪的行为 Dapper中是否有一种机制可以在Date字段转换为DateTime时捕获,并以不同方式设置DateTimeKind?或者强制特定的TypeHandler用于某些列?您可以做您想做的事情,但需要注意。您可以创建一个自定义的TypeHandler,但作为

有很多关于如何做的故事

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


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

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

在较旧的版本中,没有办法替换它们(我根据经验知道,我不得不修改dapper,因为我遇到了一个非常类似的情况),但是现在可以使用
SqlMapper.RemoveTypeMap来删除映射,这样就可以删除DateTime映射并使用自定义的typehandler

警告:所有的日期时间都将由类型处理程序处理,然后必须确定反序列化的是
日期
还是
日期时间
,并对两者应用不同的逻辑,当您收到一个已经是
日期时间
对象时,有什么可能比较棘手