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<user>("SELECT * FROM Users WHERE Age > @age", new { age = 18 });</user>
插入数据:int rows = conn.Execute("INSERT INTO Users (Name, Age) VALUES (@name, @age)", new { name = "张三", age = 25 });
参数一律用 @参数名占位符,Dapper 自动处理参数化防止 SQL 注入
常用操作速查
Query
IEnumerable<t></t>)
QuerySingle
QueryFirstOrDefault
Execute():执行 INSERT/UPDATE/DELETE,返回影响行数
QueryMultiple():一次执行多个 SQL(用分号分隔),返回
GridReader,适合关联查询减少往返 例如联合查用户和订单:
var multi = conn.QueryMultiple("SELECT * FROM Users; SELECT * FROM Orders"); var users = multi.Read<user>(); var orders = multi.Read<order>();</order></user>
注意:GridReader必须按顺序读取,且不能跳过某一部分
小贴士与避坑提醒
Dapper 不自动映射字段大小写,数据库列名需与 C# 属性名**完全匹配**(默认区分大小写),常见解决方式:
用 SQL 别名:SELECT Id AS ID, UserName AS Name FROM Users配置全局映射规则(需自定义
IDbConnection扩展或使用第三方适配器如 Dapper.FluentMap) 确保实体属性是 public get/set,私有字段不会被映射 异步方法存在(如
QueryAsync<t></t>、
ExecuteAsync),推荐 Web/API 场景使用 别把 Dapper 当全自动 ORM —— 它不跟踪变更、不缓存、不建表,SQL 和事务逻辑仍需你把控
基本上就这些。Dapper 的核心就是“连接 + SQL 字符串 + 参数对象”,没有魔法,但足够快、足够稳。
