ASP.NET Core怎么使用Dapper ASP.NET Core集成Dapper教程

ASP.NET Core 本身不内置 ORM,但可集成轻量高性能的 Dapper,适用于手写 SQL、极致性能或复杂查询场景;需安装 Dapper 及对应数据库驱动,配置连接字符串并注册 IDbConnection 工厂服务,再在控制器中注入使用。

ASP.NET Core 本身不内置 ORM,但可以轻松集成轻量级高性能的 Dapper。它不替代 Entity Framework,而是适合需要手写 SQL、追求极致性能或已有复杂查询逻辑的场景。

安装 Dapper 和数据库驱动

Dapper 是一个 NuGet 包,本身不依赖特定数据库,需额外安装对应数据库的 ADO.NET 驱动(如 SQL Server 用 Microsoft.Data.SqlClient)。

  • 在项目中运行:dotnet add package Dapper
  • SQL Server:运行 dotnet add package Microsoft.Data.SqlClient
  • MySQL:用 Pomelo.EntityFrameworkCore.MySql(仅需驱动时可选 MySqlConnector
  • PostgreSQL:推荐 Npgsql

配置数据库连接字符串

appsettings.json 中添加连接字符串:

"ConnectionStrings": { "DefaultConnection": "Server=.;Database=MyAppDb;Trusted_Connection=true;" }

然后在 Program.cs(.NET 6+)中注册为服务:

builder.Services.AddSingletonstring>(builder.Configuration.GetConnectionString("DefaultConnection"));

封装 IDbConnection 工厂(推荐)

避免每次手动 new SqlConnection,建议注册一个工厂服务来创建连接:

builder.Services.AddTransient(sp => { var connStr = sp.GetRequiredService(); return new SqlConnection(connStr); });

这样控制器或仓储中直接注入 IDbConnection,Dapper 就能自动使用它执行查询。

在 Controller 或 Service 中使用 Dapper

以获取用户列表为例(假设已建好 User 表):

public class UserController : ControllerBase
{
    private readonly IDbConnection _conn;
public UserController(IDbConnection conn) => _conn = conn;

[HttpGet]
public async Task GetUsers()
{
    var users = await _conn.QueryAsync("SELECT * FROM Users");
    return Ok(users);
}

}

注意:
QueryAsync 用于 SELECT 返回多行;
QuerySingleAsync 用于必须返回一行;
ExecuteAsync 用于 INSERT/UPDATE/DELETE;
– 参数化查询防注入:await _conn.QueryAsync("SELECT * FROM Users WHERE Id = @id", new { id = 123 });

基本上就这些。Dapper 集成 ASP.NET Core 不复杂但容易忽略连接生命周期管理——用 Transient + IDbConnection 工厂是最简洁稳妥的做法。