直接用 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 类型 → 确保类型和数据库字段一致
基本上就这些。
