跳转到主内容
极星编程网:以代码为星,赴技术山海!

C#怎么使用Dapper C#轻量级ORM框架Dapper的基本用法

Dapper是.NET轻量级ORM框架,通过扩展IDbConnection提供高效数据库操作。1. 使用NuGet安装Dapper包并引用命名空间;2. 手动创建SqlConnection并用using管理连接;3. 用Query执行查询并将结果映射为对象;4. 支持参数化查询防止SQL注入;5. Execute方法执行增删改操作并返回影响行数;6. QueryFirstOrDefault获取单条数据,ExecuteScalar获取标量值;7. QueryMultiple支持多结果集读取;8. 多表关联可通过Query方法结合splitOn映射主从对象关系。核心在于简化原生SQL与对象映射。 Dapper 是一个轻量级的 ORM(对象关系映射)框架,适用于 C# 和 .NET 环境。它通过扩展 IDbConnection 接口,提供了简洁高效的数据库操作方式,特别适合需要高性能和灵活 SQL 控制的场景。相比 Entity Framework,Dapper 更加简单直接,性能也更高。 1. 安装 Dapper 在项目中使用 Dapper,首先需要通过 NuGet 安装包: Install-Package Dapper 安装完成后,你可以在代码中引用 Dapper 命名空间: using Dapper; 2. 建立数据库连接 Dapper 不提供连接管理,你需要自己创建并管理数据库连接。以 SQL Server 为例:
using (var connection = new SqlConnection("Server=.;Database=TestDB;Integrated Security=true;")) { connection.Open(); // 执行 Dapper 操作 }
注意:推荐使用 using 语句确保连接正确释放。 3. 查询数据 - Query 方法 使用 Query 方法可以将查询结果映射到指定类型。 假设有一个 User 表:
CREATE TABLE User ( Id INT IDENTITY PRIMARY KEY, Name NVARCHAR(50), Email NVARCHAR(100) );
对应的实体类:
public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } }
查询所有用户:
var users = connection.Query("SELECT * FROM User"); foreach (var user in users) { Console.WriteLine($"{user.Id}: {user.Name} - {user.Email}"); }
4. 带参数的查询 避免 SQL 注入,使用参数化查询:
var user = connection.Query( "SELECT * FROM User WHERE Id = @Id", new { Id = 1 });
多个参数也可以用匿名对象传入:
var result = connection.Query( "SELECT * FROM User WHERE Name = @Name AND Email = @Email", new { Name = "张三", Email = "zhangsan@example.com" });
5. 执行增删改操作 - Execute 插入数据: C函数速查手册(CHM版) C函数速查手册(CHM版) 下载
var sql = "INSERT INTO User (Name, Email) VALUES (@Name, @Email)"; var rowsAffected = connection.Execute(sql, new { Name = "李四", Email = "lisi@example.com" });
更新数据:
var sql = "UPDATE User SET Email = @Email WHERE Id = @Id"; var rowsAffected = connection.Execute(sql, new { Id = 1, Email = "newemail@example.com" });
删除数据:
var sql = "DELETE FROM User WHERE Id = @Id"; var rowsAffected = connection.Execute(sql, new { Id = 1 });
Execute 返回受影响的行数。 6. 查询单条数据或标量值 获取单个对象:
var user = connection.QueryFirstOrDefault("SELECT * FROM User WHERE Id = @Id", new { Id = 1 });
如果没找到,返回 null(引用类型)或默认值。 查询标量值(如计数):
var count = connection.ExecuteScalar("SELECT COUNT(*) FROM User");
7. 多结果集查询(Multiple Results) 一次执行返回多个结果集,提高性能:
var sql = @" SELECT * FROM User; SELECT * FROM Order WHERE UserId = @UserId;";

using (var multi = connection.QueryMultiple(sql, new { UserId = 1 })) { var users = multi.Read().ToList(); var orders = multi.Read().ToList(); }

8. 映射复杂对象(多表关联) 支持将多表查询结果映射到主从对象:
var sql = @" SELECT u.*, o.* FROM User u LEFT JOIN Order o ON u.Id = o.UserId";

var lookup = new Dictionary();

var result = connection.Query(sql, (user, order) => { if (!lookup.TryGetValue(user.Id, out var usr)) { usr = user; usr.Orders = new List(); lookup.Add(usr.Id, usr); } if (order != null) usr.Orders.Add(order); return usr; }, splitOn: "Id");

var usersWithOrders = lookup.Values;

基本上就这些。Dapper 的核心就是简化 ADO.NET 操作,让你写原生 SQL 的同时,自动映射到对象,不复杂但容易忽略细节比如参数命名和 splitOn 的使用。

相关文章