

新闻资讯
技术学院Dapper 可直接映射 C# 9 record 类型,无需额外配置;字段名需与数据库列名一致或通过 SQL 别名、[Column] 特性对齐,支持位置 record 和不可变属性,泛型查询及高级功能均兼容。
Dapper 可以直接映射到 C# 9 的 record 类型,无需额外配置,只要字段名与数据库列名一致或通过标准方式对齐即可。record 本质仍是编译后生成的 class,Dapper 对它的支持和普通 class 完全相同。
Dapper 默认按属性名(PascalCase)匹配数据库列名(通常是 snake_case 或 PascalCase)。只要 record 的属性名和 SQL 查询返回的列名能对上,就能自动填充。
user_name,record 属性写成 UserName,Dapper 不会自动转换下划线;此时需用 SQL 别名或 [Column] 特性SELECT id AS Id, user_name AS UserName FROM users
public record User(int Id, string UserName);
C# 9 的位置 record(带括号参数的写法)也能被 Dapper 正常映射,前提是构造函数参数名与列名一致。
public record Product(int Id, string Name, decimal Price);
record 默认不可变(属性只有 init 或 get),这对 Dap
per 查询完全无影响——Dapper 只负责把数据填进去,不修改对象状态。
conn.Execute(sql, new { Id = 1, Name = "A" })),一切照常conn.Execute(sql, myRecord)),确保 record 属性有 public getter,Dapper 能通过反射读取值即可record 在运行时就是普通 class,typeof(MyRecord).IsClass == true,所以 Dapper 的泛型方法 Query、QueryFirstOrDefault 都能无缝使用。
a == b 按值判断),又不增加映射成本基本上就这些。record 和 Dapper 结合不复杂但容易忽略细节——关键是理解 record 不是“特殊类型”,而是编译器帮你省去样板代码的 class,Dapper 照样认得它。