Dapper 是一个轻量级的 .NET ORM(对象关系映射)库,由 Stack Overflow 团队开发。它以极高的性能和简单的 API 著称,适合需要直接编写 SQL、追求高效数据访问的场景。Dapper 通过扩展方法将 SQL 查询结果快速映射为 C# 对象,常用于微服务、数据访问层等。
主要特点:
- 性能接近原生 ADO.NET
- 支持参数化查询,防止 SQL 注入
- 自动将查询结果映射为实体对象或集合
- 支持多表查询、存储过程、事务等
- 语法简洁,易于集成
用法举例
假设有如下实体类和数据库表:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
查询示例
using Dapper;
using System.Data.SqlClient;
using System.Collections.Generic;
class Program
{
static void Main()
{
string connStr = "Server=localhost;Database=TestDb;Trusted_Connection=True;";
using var connection = new SqlConnection(connStr);
// 查询所有用户
IEnumerable<User> users = connection.Query<User>("SELECT Id, Name FROM Users");
foreach (var user in users)
{
Console.WriteLine($"Id: {user.Id}, Name: {user.Name}");
}
}
}
插入示例
using Dapper;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connStr = "Server=localhost;Database=TestDb;Trusted_Connection=True;";
using var connection = new SqlConnection(connStr);
var newUser = new User { Name = "张三" };
string sql = "INSERT INTO Users (Name) VALUES (@Name)";
connection.Execute(sql, newUser);
}
}
说明:
- 只需一行代码即可完成查询和映射。
- 支持参数化,安全高效。
- 适合需要灵活 SQL 和高性能的数据访问场景。
更多用法可参考官方文档:Dapper 官网。
下面演示在 ASP.NET Core Web API 项目中使用 Dapper 进行简单的数据访问(以 SQL Server 为例)。
1. 安装 NuGet 包
dotnet add package Dapper
dotnet add package Microsoft.Data.SqlClient
2. 配置数据库连接(appsettings.json)
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=TestDb;Trusted_Connection=True;"
}
}
3. 创建实体类
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
4. 控制器中使用 Dapper
using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using System.Collections.Generic;
using System.Data;
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly string _connectionString;
public UsersController(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DefaultConnection");
}
[HttpGet]
public IEnumerable<User> GetAll()
{
using var connection = new SqlConnection(_connectionString);
return connection.Query<User>("SELECT Id, Name FROM Users");
}
[HttpPost]
public IActionResult Create([FromBody] User user)
{
using var connection = new SqlConnection(_connectionString);
var sql = "INSERT INTO Users (Name) VALUES (@Name)";
connection.Execute(sql, user);
return Ok("添加成功");
}
}
说明:
- 通过依赖注入获取数据库连接字符串。
- 使用 Dapper 的
Query<T>查询数据,Execute执行插入。 - 适用于高性能、灵活 SQL 的场景。
如需更复杂的操作(如事务、存储过程等),Dapper 也有相应支持。