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

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

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;
<pre class="brush:php;toolbar:false;">public UserController(IDbConnection conn) => _conn = conn;
[HttpGet]
public async Task<IActionResult> GetUsers()
{
    var users = await _conn.QueryAsync<User>("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 工厂是最简洁稳妥的做法。

相关推荐