Dapper 是一个轻量级的对象关系映射器(ORM),专为.NET 平台设计。它使用简单的 API,允许开发者以流畅、简洁的方式操作数据库,同时保持对 SQL 语句的直接控制。Dapper 是 Stack Overflow 团队开发的一个开源项目,以其高性能和易用性而受到广大开发者的喜爱。
Dapper 的主要特点
轻量级:Dapper 是一个非常轻量级的库,对性能的影响非常小。
直接 SQL:Dapper 鼓励直接写 SQL,而不是使用抽象查询语法,这使得开发者能够充分利用数据库的能力。
动态映射:Dapper 支持动态地映射查询结果到对象,无需事先定义对象结构。
异步支持:Dapper 提供异步方法,支持异步数据库操作。
简单 API:Dapper 的 API 非常简洁,易于学习和使用。
Dapper 的基本用法
首先,你需要在项目中安装 Dapper。通过 NuGet 包管理器,可以轻松添加 Dapper 到你的项目中:
Install-Package Dapper
示例代码
假设我们有一个简单的 User 类和一个数据库表 Users:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
以下是如何使用 Dapper 执行查询、插入、更新和删除操作的示例代码:
查询
using System.Data.SqlClient;
using Dapper;
string connectionString = "YourConnectionStringHere";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
// 查询单条记录
var user = connection.QueryFirstOrDefault<User>("SELECT * FROM Users WHERE Id = @Id", new { Id = 1 });
// 查询多条记录
var users = connection.Query<User>("SELECT * FROM Users WHERE Email LIKE @Email", new { Email = "%@example.com" });
// 动态类型查询
var dynamicUsers = connection.Query("SELECT * FROM Users WHERE Email LIKE @Email", new { Email = "%@example.com" }).ToList();
}
插入
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var newUserId = connection.Execute(
"INSERT INTO Users (Name, Email) VALUES (@Name, @Email); SELECT CAST(SCOPE_IDENTITY() AS INT)",
new { Name = "NewUser", Email = "newuser@example.com" }
);
}
更新
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var updatedRows = connection.Execute(
"UPDATE Users SET Name = @Name WHERE Id = @Id",
new { Name = "UpdatedUser", Id = 1 }
);
}
删除
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var deletedRows = connection.Execute(
"DELETE FROM Users WHERE Id = @Id",
new { Id = 1 }
);
}
总结
Dapper 是一个高性能且简单易用的微型 ORM,它允许开发者在保持对 SQL 语句的直接控制的同时,享受 ORM 带来的便利。它避免了过度抽象,提供了直接、高效的数据库操作方法,非常适合那些重视性能和灵活性的项目。通过上面的示例代码,我们可以看到 Dapper 的基本用法是如何简洁和强大的。