通八洲科技

Dapper如何处理TimeSpan类型 Dapper映射SQL time类型

日期:2025-12-24 00:00 / 作者:星降
Dapper 默认不支持 TimeSpan 类型直接映射,因其内置类型处理器未覆盖 TimeSpan;需手动注册 ITypeHandler 实现 SQL Server 的 time 类型双向转换,或在 SQLite 中用 TEXT/INTEGER 替代并手动解析。

Dapper 默认不支持 TimeSpan 类型的直接映射,尤其在使用 SQLite 或某些数据库提供程序时(如 Microsoft.Data.Sqlite),TimeSpan 会被明确排除在自动转换列表之外。

为什么 Dapper 不原生映射 TimeSpan

SQL Server 的 time 类型逻辑上对应 .NET 的 TimeSpan,但 Dapper 的内置类型处理器只覆盖常见基础类型(intstringDateTime 等),而未包含 TimeSpan。官方文档与源码注释中已明确说明:它不能处理 TimeSpan、DateTimeOffset、Guid 等类型,需手动注册处理器。

SQL Server 中 time → TimeSpan 的正确映射方式

在 SQL Server 场景下,可借助自定义 ITypeHandler 实现双向转换:

SQLite 等轻量数据库的替代方案

SQLite 没有原生 time 类型,通常用 TEXT(如 "14:30:00")或 INTEGER(秒数)存储时间跨度。此时建议:

实用小技巧:不用自定义处理器也能临时处理

对简单场景,可绕过映射限制:

基本上就这些。关键不是“能不能”,而是“要不要自己搭桥”——Dapper 把控制权留给你,也正因如此,它轻、快、不越界。