dapper扩展
时间: 2025-08-21 14:30:30 浏览: 5
### 关于 Dapper 扩展方法的使用
Dapper 是一个轻量级 ORM 框架,虽然其核心功能已经非常强大,但在某些场景下可能仍需借助扩展来提升开发效率。以下是关于 Dapper 常见扩展的功能和使用教程。
#### 1. **Dapper.Contrib**
`Dapper.Contrib` 提供了一组用于简化 CRUD 操作的方法[^3]。它允许开发者无需编写复杂的 SQL 查询即可完成常见的增删改查操作。
##### 功能特点
- 支持 `[Key]`, `[Computed]`, 和 `[Write]` 属性标记实体类字段。
- 自动映射对象到表结构。
##### 使用示例
```csharp
using Dapper;
using Dapper.Contrib.Extensions;
public class User
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
// 插入数据
var user = new User { Name = "Alice" };
connection.Insert(user);
// 更新数据
user.Name = "Bob";
connection.Update(user);
// 删除数据
connection.Delete(user);
```
---
#### 2. **Dapper.Linq**
`Dapper.Linq` 结合 LINQ 表达式提供更简洁的查询方式。它可以显著减少手动拼接 SQL 的工作量。
##### 功能特点
- 支持基于 LINQ 的动态查询构建。
- 可以轻松实现复杂条件过滤、分页等功能。
##### 使用示例
```csharp
using Dapper.Linq;
var users = connection.Query<User>()
.Where(u => u.Age > 18 && u.IsActive)
.OrderByDescending(u => u.CreatedAt)
.Skip(10).Take(20)
.ToList();
```
---
#### 3. **dapper-repositories**
`dapper-repositories` 是一个第三方库,旨在为 Dapper 提供通用仓储模式的支持[^4]。通过该库,可以快速搭建基于接口驱动的数据访问层。
##### 功能特点
- 预定义了 `IRepository<T>` 接口以及其实现类。
- 内置支持事务管理、批量操作等特性。
##### 使用示例
```csharp
using Dapper.Repositories;
public interface IUserRepository : IRepository<User> {}
public class UserRepository : RepositoryBase<User>, IUserRepository
{
public UserRepository(IDbConnection connection) : base(connection) {}
}
// 创建仓库实例并执行操作
var userRepository = new UserRepository(connection);
userRepository.Add(new User { Name = "Charlie" });
var allUsers = userRepository.GetAll().ToList();
```
---
#### 4. **自定义扩展方法**
除了官方或社区提供的扩展外,还可以根据具体业务需求自行创建扩展方法。例如封装常用的分页逻辑:
##### 实现代码
```csharp
public static IEnumerable<T> GetPagedResults<T>(this IDbConnection conn,
string sql,
object param,
int pageNumber,
int pageSize)
{
var offset = (pageNumber - 1) * pageSize;
return conn.Query<T>(
$"{sql} OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY",
new { param.Offset = offset, param.PageSize = pageSize });
}
```
调用时只需传递基础查询语句及相关参数即可完成分页处理。
---
### 总结
上述提到的各种扩展工具能够有效增强 Dapper 的功能性,满足不同层次的需求。无论是简单的 CRUD 操作还是复杂的多表联查,都可以找到合适的解决方案][^[^34]。
阅读全文
相关推荐


















