Dapper 默认不支持私有构造函数映射,但可通过 [Dapper.Constructor] 特性(推荐,需 v2.0+)或 Query(sql, map: ...) 手动构造实现;参数名须与 SQL 字段名严格匹配,或通过委托显式调用私有构造函数。

Dapper 默认不支持直接映射到具有私有构造函数的类,因为它依赖于反射创建实例,而私有构造函数在没有显式指定时通常不会被调用(尤其当存在公有无参构造函数时)。但你可以通过几种方式让 Dapper 正确映射到私有构造函数的类。
使用带有参数的私有构造函数 + [Dapper.Constructor] 特性(推荐)
Dapper 从 v2.0 开始支持 [Dapper.Constructor] 特性,用于标记你希望 Dapper 在构造对象时调用的构造函数。只要该构造函数参数名与查询字段名(或别名)匹配,Dapper 就能自动绑定并调用它。
- 确保引用的是 Dapper ≥ 2.0(如
Dapper 2.1.24或更高) - 在目标构造函数上添加
[Dapper.Constructor] - 参数名需与 SQL 查询中的列名(或别名)严格一致(区分大小写取决于数据库和设置)
public class User
{
public int Id { get; }
public string Name { get; }
[Dapper.Constructor]
private User(int id, string name)
{
Id = id;
Name = name;
}
}
// 查询必须返回对应字段名(或别名)
var users = connection.Query<User>("SELECT Id, Name FROM Users");
登录后复制
手动指定映射:使用 Query(sql, map: ...) 重载
如果你无法修改类(比如是第三方类型),或想完全控制映射逻辑,可以用 Dapper 的 map 参数手动构造对象。
标签: app
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~