C#怎么使用Dapper C# Dapper ORM连接数据库方法

9次阅读

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

C#怎么使用Dapper C# Dapper ORM连接数据库方法

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)、Npgsqlpostgresql)或 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 注入

常用操作速查

Query():返回多条记录(如 IEnumerable
QuerySingle():必须返回且仅返回 1 条,否则抛异常
QueryFirstOrDefault():返回第一条或 NULL(推荐用于可能无结果的场景)
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,私有字段不会被映射
  • 异步方法存在(如 QueryAsyncExecuteAsync),推荐 Web/API 场景使用
  • 别把 Dapper 当全自动 ORM —— 它不跟踪变更、不缓存、不建表,SQL 和事务逻辑仍需你把控

基本上就这些。Dapper 的核心就是“连接 + SQL 字符串 + 参数对象”,没有魔法,但足够快、足够稳。

text=ZqhQzanResources