Dapper怎么使用Dapper.Contrib进行CRUD Dapper.Contrib快速操作指南

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

直接用 Dapper.Contrib 就能绕过手写 SQL,实现接近原生 Dapper 性能的 CRUD 操作,关键在实体标记和方法调用——不复杂但容易忽略细节。

安装与基础引用

先通过 NuGet 安装两个包(缺一不可):

dotnet add package Dapper
dotnet add package Dapper.Contrib

代码中必须同时引入命名空间:

using Dapper;
using Dapper.Contrib.Extensions;

实体类要加特性标记

Dapper.Contrib 不靠约定猜表名或主键,而是依赖特性显式声明。最简配置示例如下:

[Table("Users")]<br>public class User<br>{<br>    [Key]<br>    public int Id { get; set; }<br>    public string Name { get; set; }<br>    public DateTime CreatedAt { get; set; }<br>}

注意点:

[Table]
必须指定数据库表名,不能省略
[Key]
标识主键字段,仅一个字段可用;若主键非自增或需手动赋值,可加
[ExplicitKey]
[Computed]
用于数据库计算列(如
GETDATE()
),插入/更新时自动跳过
不加任何标记的属性默认参与插入和更新

四大核心方法直接上手

所有方法都是

IDbConnection
的扩展,连接打开后即可调用:

查单条
connection.Get<user>(1)</user>
→ 等效
SELECT * FROM Users WHERE Id = @Id
查全部
connection.GetAll<user>()</user>
→ 返回
IEnumerable<user></user>
插一条
int newId = connection.Insert(new User { Name = "Alice" });
→ 自增主键自动返回,非自增则返回影响行数
删/改
connection.Update(user)
connection.Delete(user)
,都按
[Key]
字段匹配操作

支持事务传参:

connection.Insert(user, transaction)
,适合多步一致性操作。

批量操作与常见避坑

批量插入、更新、删除也内置支持:

connection.Insert(new[] { u1, u2, u3 })
→ 一次插入多条,返回主键数组
connection.Update(new[] { u1, u2 })
→ 按主键批量更新

容易出错的地方:

实体没加
[Table]
[Key]
→ 运行时报
InvalidOperationException: No key defined
主键字段名不是
Id
且未标
[Key]
→ 查不到、插不进
Get<t>(id)</t>
但传入的是字符串或 Guid 类型 → 确保类型和数据库字段一致

基本上就这些。

相关推荐