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

来源:这里教程网 时间:2026-02-21 17:30:21 作者:

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<User>("SELECT * FROM User");
foreach (var user in users)
{
    Console.WriteLine($"{user.Id}: {user.Name} - {user.Email}");
}

4. 带参数的查询

避免 SQL 注入,使用参数化查询:

var user = connection.Query<User>(
    "SELECT * FROM User WHERE Id = @Id", 
    new { Id = 1 });

多个参数也可以用匿名对象传入:

var result = connection.Query<User>(
    "SELECT * FROM User WHERE Name = @Name AND Email = @Email",
    new { Name = "张三", Email = "zhangsan@example.com" });

5. 执行增删改操作 - Execute

插入数据:

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<User>("SELECT * FROM User WHERE Id = @Id", new { Id = 1 });

如果没找到,返回 null(引用类型)或默认值。

查询标量值(如计数):

var count = connection.ExecuteScalar<int>("SELECT COUNT(*) FROM User");

7. 多结果集查询(Multiple Results)

一次执行返回多个结果集,提高性能:

var sql = @"
    SELECT * FROM User;
    SELECT * FROM Order WHERE UserId = @UserId;";
<p>using (var multi = connection.QueryMultiple(sql, new { UserId = 1 }))
{
var users = multi.Read<User>().ToList();
var orders = multi.Read<Order>().ToList();
}

8. 映射复杂对象(多表关联)

支持将多表查询结果映射到主从对象:

var sql = @"
    SELECT u.*, o.*
    FROM User u
    LEFT JOIN Order o ON u.Id = o.UserId";
<p>var lookup = new Dictionary<int, User>();</p><p>var result = connection.Query<User, Order, User>(sql, (user, order) =>
{
if (!lookup.TryGetValue(user.Id, out var usr))
{
usr = user;
usr.Orders = new List<Order>();
lookup.Add(usr.Id, usr);
}
if (order != null) usr.Orders.Add(order);
return usr;
}, splitOn: "Id");</p><p>var usersWithOrders = lookup.Values;

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

相关推荐