Dapper 默认按列名映射到同名公共属性,忽略某列应优先在SQL中显式指定字段;不支持JsonIgnore等序列化特性;也可用匿名类型或QueryMultiple灵活控制,自定义IMapper属高级用法。
Dapper 默认会将查询结果的每一列映射到目标类的同名公共属性上,如果想让某个属性不参与映射(即忽略数据库中某列,或不让类中某个属性被赋值),有几种常用且可靠的方式。
Dapper 本身不读取 `[JsonIgnore]`、`[XmlIgnore]` 或 `[NonSerialized]` 这类序列化相关特性。它只认自己支持的映射控制方式,所以不能依赖这些来跳过属性映射。
最直接、高效、无歧义的做法是在 SQL 中明确列出需要的字段,而不是用 `SELECT *`。
示例:
C#var users = connection.Query
假设 User 类还有 PasswordHash 属性,只要 SQL 没查它,Dapper 就不会给它赋值(保持默认值,如 null 或 default)。
如果只是临时忽略某些字段,或者想组合不同查询结果,可用匿名对象接收:
var result = connection.Query("SELECT Id, Name FROM Users").ToList(); // 返回 dynamic 或匿名对象
或者用 QueryMultiple 分步查,只映射关心的部分。
Dapper 支持通过 `SqlMapper.AddTypeHandler
基本上就这些。日常开发中,**优先用 SQL 显式列名**,既清晰又稳定;避免依赖特性或运行时反射干预,默认行为已足够简洁可靠。