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)。
- 在项目中运行:red">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
这样控制器或仓储中直接注入 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 工厂是最简洁稳妥的做法。










