Dapper 是基于 ADO.NET 的轻量级高性能 .NET ORM,仅作极简封装,支持参数化查询与执行,不生成 SQL、不管理实体生命周期;需手动引用数据库驱动,通过 IDbConnection 扩展方法操作,强调控制力与性能。

Dapper 是一个轻量级、高性能的 .NET ORM(对象关系映射)库,它不替代 ADO.NET,而是在其基础上做了极简封装,通过扩展方法直接操作 IDbConnection。它不生成 SQL、不管理实体生命周期、不支持懒加载,但执行快、学习成本低、控制力强。
安装 Dapper 包
在项目中通过 NuGet 安装:
- Visual Studio:右键项目 → “管理 NuGet 包” → 搜索 Dapper → 安装
- 命令行(.NET CLI):
dotnet add package Dapper - 注意:Dapper 本身只依赖
System.Data.Common,无需额外数据库驱动包 —— 但你得自己引用对应数据库的 ADO.NET 驱动,比如Microsoft.Data.SqlClient(SQL Server)、Npgsql(PostgreSQL)或MySqlConnector(MySQL)
基础连接与查询(以 SQL Server 为例)
你需要一个打开的数据库连接(IDbConnection),Dapper 的所有扩展方法都挂在这个接口上:
- 创建连接字符串(例如 SQL Server):
"Server=localhost;Database=TestDB;Trusted_Connection=true;" - 用
using确保连接释放:using var conn = new SqlConnection(connectionString); - 执行查询:
var users = conn.Query("SELECT * FROM Users WHERE Age > @age", new { age = 18 }); - 插入数据:
int rows = conn.Execute("INSERT INTO Users (Name, Age) VALUES (@name, @age)", new { name = "张三", age = 25 }); - 参数一律用
@参数名占位符,Dapper 自动处理参数化防止 SQL 注入
常用操作速查
QueryIEnumerable)
QuerySingle
QueryFirstOrDefault
Execute():执行 INSERT/UPDATE/DELETE,返回影响行数
QueryMultiple():一次执行多个 SQL(用分号分隔),返回 GridReader,适合关联查询减少往返
- 例如联合查用户和订单:
var multi = conn.QueryMultiple("SELECT * FROM Users; SELECT * FROM Orders"); var users = multi.Read(); var orders = multi.Read (); - 注意:
GridReader必须按顺序读取,且不能跳过某一部分
小贴士与避坑提醒
Dapper 不自动映射字段大小写,数据库列名需与 C# 属性名**完全匹配**(默认区分大小写),常见解决方式:
- 用 SQL 别名:
SELECT Id AS ID, UserName AS Name FROM Users - 配置全局映射规则(需自定义
IDbConnection扩展或使用第三方适配器如 Dapper.FluentMap) - 确保实体属性是 public get/set,私有字段不会被映射
- 异步方法存在(如
QueryAsync、ExecuteAsync),推荐 Web/API 场景使用 - 别把 Dapper 当全自动 ORM —— 它不跟踪变更、不缓存、不建表,SQL 和事务逻辑仍需你把控
基本上就这些。Dapper 的核心就是“连接 + SQL 字符串 + 参数对象”,没有魔法,但足够快、足够稳。










