Dapper怎么在.NET 6 Minimal API中使用 Dapper集成Minimal API教程

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

Dapper在.NET 6 Minimal API中的基本集成

Minimal API不依赖Startup或Program类的复杂配置,Dapper作为轻量级ORM,天然适配这种简洁风格。你不需要注册IDbConnection服务,只需在需要的地方手动创建连接(如SqlConnection),用Dapper扩展方法执行查询即可。

安装必要NuGet包

确保项目引用以下两个核心包:

Dapper(最新稳定版,如 v2.1.24) Microsoft.Data.SqlClient(.NET 6+推荐,替代旧版System.Data.SqlClient)

命令行安装示例:

dotnet add package Dapper
dotnet add package Microsoft.Data.SqlClient

在Minimal API中直接使用Dapper查询

以一个获取用户列表的GET端点为例,直接在MapGet里写数据访问逻辑:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
<p>app.MapGet("/users", async (HttpContext ctx) =>
{
var connectionString = builder.Configuration.GetConnectionString("Default");
using var connection = new SqlConnection(connectionString);
var users = await connection.QueryAsync<User>("SELECT * FROM Users");
return Results.Ok(users);
});</p><p>app.Run();
</p>

注意点:

连接对象必须用
using
确保及时释放
推荐用
QueryAsync
配合
Results.Ok
返回IResult,保持异步友好
SQL语句建议参数化,避免拼接字符串(例如:
"WHERE Id = @id"
+ new { id = 123 })

进阶:封装Dapper访问逻辑提升可维护性

不建议所有API都内联SQL。可以提取为简单服务类,比如

UserRepository

public class UserRepository
{
    private readonly string _connectionString;
    public UserRepository(IConfiguration config) =>
        _connectionString = config.GetConnectionString("Default");
<pre class="brush:php;toolbar:false;">public async Task<IEnumerable<User>> GetAllAsync() =>
    await using var c = new SqlConnection(_connectionString);
    return await c.QueryAsync<User>("SELECT * FROM Users");

}

然后在Minimal API中注入并使用:

builder.Services.AddScoped<UserRepository>();
<p>// … 在MapGet中:
app.MapGet("/users", async (UserRepository repo) =>
Results.Ok(await repo.GetAllAsync()));
</p>

这样既保持Minimal API的简洁,又兼顾了分层和测试友好性。

基本上就这些。Dapper和Minimal API搭配起来很轻快,不用动辄引入EF Core或复杂DI配置,适合中小项目或需要精细控制SQL的场景。

相关推荐