Dapper在.NET 6 Minimal API中可直接手动创建SqlConnection并用QueryAsync执行异步查询,无需注册IDbConnection;推荐安装Dapper和Microsoft.Data.SqlClient包,结合参数化SQL与using释放连接,或封装为Repository提升可维护性。

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 Dapperdotnet add package Microsoft.Data.SqlClient
在Minimal API中直接使用Dapper查询
以一个获取用户列表的GET端点为例,直接在MapGet里写数据访问逻辑:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build();app.MapGet("/users", async (HttpContext ctx) => { var connectionString = builder.Configuration.GetConnectionString("Default"); using var connection = new SqlConnection(connectionString); var users = await connection.QueryAsync
("SELECT * FROM Users"); return Results.Ok(users); }); app.Run();
注意点:
- 连接对象必须用
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");
public async Task> GetAllAsync() =>
await using var c = new SqlConnection(_connectionString);
return await c.QueryAsync("SELECT * FROM Users");
}
然后在Minimal API中注入并使用:
builder.Services.AddScoped();
// … 在MapGet中:
app.MapGet("/users", async (UserRepository repo) =>
Results.Ok(await repo.GetAllAsync()));
这样既保持Minimal API的简洁,又兼顾了分层和测试友好性。
基本上就这些。Dapper和Minimal API搭配起来很轻快,不用动辄引入EF Core或复杂DI配置,适合中小项目或需要精细控制SQL的场景。










