




Dapper 是基于 ADO.NET 的轻量级高性能 .NET ORM,仅作极简封装,支持参数化查询与执行,不生成 SQL、不管理实体生命周期;需手动引用数据库驱动,通过 IDbConnection 扩展方法操作,强调控制力与性能。
Dapper 是一个轻量级、高性能的 .NET ORM(对象关系映射)库,它不替代 ADO.NET,而是在其基础上做了极简封装,通过扩展方法直接操作 IDbConnection。它不生成 SQL、不管理实体生命周期、不支持懒加载,但执行快、学习成本低、控制力强。
在项目中通过 NuGet 安装:
dotnet add package Dapper
System.Data.Common,无需额外数据库驱动包 —— 但你得自己引用对应数据库的 ADO.NET 驱动,比如 Microsoft.Data.SqlClient(SQL Server)、Npgsql(PostgreSQL)或 MySqlConnector(MySQL)你需要一个打开的数据库连接(IDbConnection),Dapper 的所有扩展方法都挂在这个接口上:
"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# 属性名**完全匹配**(默认区分大小写),常见解决方式:
SELECT Id AS ID, UserName AS Name FROM Users
IDbConnection 扩展或使用第三方适配器如 Dapper.FluentMap)QueryAsy
nc、ExecuteAsync),推荐 Web/API 场景使用基本上就这些。Dapper 的核心就是“连接 + SQL 字符串 + 参数对象”,没有魔法,但足够快、足够稳。