C# 语言 如何使用 Dapper

C#阿木 发布于 2025-06-13 12 次阅读


使用 Dapper 在 C 中的应用与实现

Dapper 是一个轻量级的 ORM(Object-Relational Mapper)库,它为 C 开发者提供了简单而强大的数据访问功能。与传统的 ORM 框架相比,Dapper 体积小、性能高,并且易于集成。本文将围绕 C 语言,详细介绍如何使用 Dapper 进行数据访问,包括基本用法、高级特性以及与 Entity Framework 的比较。

Dapper 简介

Dapper 是由 Stack Overflow 的创始人 Jeff Atwood 开发的一个开源项目。它是一个轻量级的 ORM 库,旨在提供高性能的数据访问解决方案。Dapper 使用 SQL 来执行数据库操作,并通过动态 SQL 来映射对象和数据库表之间的关系。

Dapper 的优势

1. 性能:Dapper 使用原始的 SQL 语句,避免了 ORM 框架中可能存在的性能损耗。
2. 简单:Dapper 的 API 简洁明了,易于学习和使用。
3. 灵活:Dapper 支持多种数据库,包括 SQL Server、MySQL、PostgreSQL 等。
4. 易于集成:Dapper 可以与多种数据访问技术(如 ADO.NET、Entity Framework 等)无缝集成。

安装 Dapper

在 Visual Studio 中,可以通过 NuGet 包管理器来安装 Dapper:

shell
Install-Package Dapper

基本用法

连接数据库

需要创建一个数据库连接。以下是一个使用 Dapper 连接到 SQL Server 数据库的示例:

csharp
using System.Data.SqlClient;

var connectionString = "Data Source=your_server;Initial Catalog=your_database;Integrated Security=True";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
// 执行数据库操作
}

执行查询

Dapper 提供了多种方法来执行查询,以下是一些常用的方法:

Query

`Query` 方法用于执行查询并返回一个 `IEnumerable` 结果集。其中 `T` 是要映射的对象类型。

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var users = connection.Query("SELECT FROM Users").ToList();
}

QuerySingle

`QuerySingle` 方法用于执行查询并返回一个 `T` 类型的结果。如果查询结果为空,则抛出异常。

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var user = connection.QuerySingle("SELECT FROM Users WHERE Id = @Id", new { Id = 1 });
}

QueryScalar

`QueryScalar` 方法用于执行查询并返回单个值。

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var count = connection.ExecuteScalar("SELECT COUNT() FROM Users");
}

执行命令

Dapper 还提供了执行命令的方法,如 `Execute` 和 `ExecuteScalar`。

Execute

`Execute` 方法用于执行 SQL 命令,并返回受影响的行数。

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var rowsAffected = connection.Execute("INSERT INTO Users (Name, Email) VALUES (@Name, @Email)", new { Name = "John Doe", Email = "john.doe@example.com" });
}

ExecuteScalar

`ExecuteScalar` 方法用于执行 SQL 命令并返回单个值。

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var count = connection.ExecuteScalar("DELETE FROM Users WHERE Id = @Id", new { Id = 1 });
}

参数化查询

为了防止 SQL 注入攻击,建议使用参数化查询。Dapper 支持参数化查询,以下是一个示例:

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var user = connection.QuerySingle("SELECT FROM Users WHERE Id = @Id", new { Id = 1 });
}

高级特性

动态 SQL

Dapper 支持动态 SQL,允许在运行时构建 SQL 语句。

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var query = "SELECT FROM Users WHERE ";
var conditions = new List();
var parameters = new DynamicParameters();

if (!string.IsNullOrEmpty(user.Name))
{
conditions.Add("Name = @Name");
parameters.Add("Name", user.Name);
}

if (!string.IsNullOrEmpty(user.Email))
{
conditions.Add("Email = @Email");
parameters.Add("Email", user.Email);
}

query += string.Join(" AND ", conditions);
var users = connection.Query(query, parameters).ToList();
}

映射对象

Dapper 可以自动将查询结果映射到对象。以下是一个示例:

csharp
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}

使用事务

Dapper 支持事务处理,以下是一个示例:

csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
// 执行多个数据库操作
connection.Execute("INSERT INTO Users (Name, Email) VALUES (@Name, @Email)", new { Name = "John Doe", Email = "john.doe@example.com" }, transaction);
connection.Execute("UPDATE Users SET Name = @Name WHERE Id = @Id", new { Name = "Jane Doe", Id = 1 }, transaction);
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
}

与 Entity Framework 的比较

Dapper 和 Entity Framework 都是 C 中常用的 ORM 框架,但它们在性能、易用性和灵活性方面有所不同。

性能

Dapper 通常比 Entity Framework 更快,因为它不包含复杂的对象映射和查询优化机制。

易用性

Dapper 的 API 简洁明了,易于学习和使用。而 Entity Framework 的学习曲线较陡峭,但提供了更丰富的功能和灵活性。

灵活性

Dapper 提供了更高的灵活性,允许开发者直接编写 SQL 语句。而 Entity Framework 则更侧重于抽象和自动映射。

结论

Dapper 是一个轻量级、高性能的 ORM 框架,适用于需要快速、灵活数据访问的 C 开发者。本文介绍了 Dapper 的基本用法、高级特性以及与 Entity Framework 的比较。通过学习本文,开发者可以更好地利用 Dapper 来提高应用程序的性能和可维护性。