Dapper如何处理Guid类型 Dapper Guid参数和映射教程

admin 百科 9
Dapper不自动处理Guid与数据库字段的格式转换,需根据数据库类型适配:字符串存储用ToString("N")和char(36),binary(16)需自定义TypeHandler,PostgreSQL推荐原生uuid类型并配合Npgsql驱动。

Dapper如何处理Guid类型 Dapper Guid参数和映射教程-第1张图片-佛山资讯网

Dapper 本身不自动处理 Guid 类型与数据库字段的底层格式转换,具体怎么存、怎么读,取决于你数据库的字段类型(如 char(36)、uuid、binary(16))以及你传参和映射时的写法。关键不是“Dapper 支持与否”,而是你是否做了适配——要么手动转字符串,要么用自定义 TypeHandler。

Guid 存成字符串(最常用,兼容性最强)

多数情况下,尤其是 PostgreSQL、SQLite 或老版本 SQL Server,数据库没有原生 uuid 类型,或你选择用字符串存储,这时推荐统一用 Guid.ToString("N")(32位无横线格式)存入 char(36)varchar(36) 字段。

  • 插入时:把 Guid 转成字符串再传参,例如 ID = Guid.NewGuid().ToString("N")
  • 查询时:从字符串字段读出后,用 new Guid(reader.GetString("ID")) 或 Dapper 自动映射(只要属性是 Guid 类型,且值可解析)
  • 建表建议:主键字段设为 char(36) NOT NULL PRIMARY KEY,比 varchar 更稳定(定长、索引友好)

Guid 映射到 binary(16)(空间更省,性能略优)

如果数据库支持 binary(16)(如 MySQL、SQL Server),且你希望节省存储、提升索引效率,可以把 Guid 存为 16 字节二进制。

  • 存入前:用 guid.ToByteArray()
  • 读出后:用 new Guid(byteArray)
  • 但 Dapper 默认不识别 binary → Guid 的自动转换,必须注册自定义 ITypeHandler
  • 示例处理器需重写 SetValue(写入时转 byte[])和 Parse(读取时转 Guid)

PostgreSQL 的特殊处理(uuid 类型原生支持)

PostgreSQL 有内置 uuid 类型,推荐优先使用它而非字符串。

标签: mysql 处理器 app 字节 c#

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~