Dapper默认支持数值型枚举的自动映射,无需配置;可空枚举(Enum?)原生兼容NULL值;字符串枚举需自定义TypeHandler实现。
Dapper 对枚举类型的支持开箱即用,无需额外配置就能完成数值型枚举的自动映射,这是它轻量又实用的关键体现之一。
Dapper 会自动识别 public enum 类型,并按其底层整数类型(如 int、byte)与数据库字段交互。只要数据库列是数值类型(如 INT、TINYINT),插入和查询都能直接工作。
UserStatus.Active,Dapper 自动转为对应数值(比如 1)写入数据库UserStatus.Active 实例Status,实体属性也得叫 Status)数据库中状态字段允许为 NULL?没问题。Dapper 原生支持 UserStatus? 类型,NULL 值会正确映射为 null,非空值照常转为对应枚举项。
public UserStatus? Status { get; set; }
null;否则是具体枚举值n
ull,Dapper 自动设为 DBNull.Value
如果数据库存的是字符串(如 "Active"、"Inactive"),而非数字,就得自己写一个 TypeHandler。
SqlMapper.TypeHandler,重写 SetValue(C# → DB)和 Parse(DB → C#)SqlMapper.AddTypeHandler(new UserStatusHandler());
UserStatus 的参数和查询结果都会走这个处理器
映射失败往往不是 Dapper 的问题,而是细节没对齐:
Active = 1),否则默认从 0 开始,容易和数据库不一致INT 对应 int,TINYINT 对应 byte)基本上就这些。默认够用,特殊需求靠 TypeHandler 扩展,不复杂但容易忽略细节。