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
这样控制器或仓储中直接注入 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
– QuerySingleAsync
– ExecuteAsync 用于 INSERT/UPDATE/DELETE;
– 参数化查询防注入:await _conn.QueryAsync
基本上就这些。Dapper 集成 ASP.NET Core 不复杂但容易忽略连接生命周期管理——用 Transient + IDbConnection 工厂是最简洁稳妥的做法。
