在ABP框架中,仓储(Repository)是用于管理实体数据存储和访问的核心组件。ABP框架提供了一个通用的仓储接口 IRepository
,该接口定义了用于处理实体的常用方法。下面是 IRepository
接口中的所有方法,这些方法可以用于执行各种CRUD(创建、读取、更新、删除)操作。
IRepository<T, TKey> 方法列表
以下是 IRepository<T, TKey>
接口中定义的主要方法。假设 T
是实体类型,TKey
是实体的主键类型:
查询操作
- GetAsync(TKey id): 根据主键获取实体。
- GetListAsync(): 获取所有实体的列表。
- GetCountAsync(): 获取实体的总数量。
- GetPagedListAsync(int skipCount, int maxResultCount, string sorting = null, Expression<Func<T, bool>> predicate = null): 获取分页后的实体列表。
- FindAsync(Expression<Func<T, bool>> predicate): 根据指定条件查找单个实体。
- FindAllAsync(Expression<Func<T, bool>> predicate): 根据指定条件查找所有符合条件的实体。
- FirstOrDefaultAsync(Expression<Func<T, bool>> predicate): 获取第一个符合条件的实体,如果没有则返回
null
。 - SingleOrDefaultAsync(Expression<Func<T, bool>> predicate): 获取单个符合条件的实体,如果没有则返回
null
。
创建操作
- InsertAsync(T entity, bool autoSave = false): 插入一个新的实体。
- InsertManyAsync(IEnumerable<T> entities, bool autoSave = false): 插入多个新的实体。
更新操作
- UpdateAsync(T entity, bool autoSave = false): 更新一个实体。
- UpdateManyAsync(IEnumerable<T> entities, bool autoSave = false): 更新多个实体。
删除操作
- DeleteAsync(T entity, bool autoSave = false): 删除一个实体。
- DeleteAsync(TKey id, bool autoSave = false): 根据主键删除一个实体。
- DeleteManyAsync(IEnumerable<T> entities, bool autoSave = false): 删除多个实体。
- DeleteManyAsync(Expression<Func<T, bool>> predicate, bool autoSave = false): 根据条件删除多个实体。
其它操作
- LongCountAsync(): 获取实体的总数量,返回
long
类型。 - AnyAsync(Expression<Func<T, bool>> predicate): 检查是否存在符合条件的实体。
- MaxAsync<TResult>(Expression<Func<T, TResult>> selector): 获取符合条件的最大值。
- MinAsync<TResult>(Expression<Func<T, TResult>> selector): 获取符合条件的最小值。
扩展和自定义
除了上述通用方法,ABP框架允许你扩展和自定义仓储方法。你可以在具体仓储类中定义特定于应用程序的查询或操作。
自定义仓储示例
//IAuthorRepository 接口定义了 两个方法,此接口 实现 IRepository
public interface IAuthorRepository : IRepository<Author, Guid>
{
Task<Author> FindByNameAsync(string name);
Task<List<Author>> GetAuthorsWithBooksAsync();
}
//EfCoreAuthorRepository 类 实现了上面的接口和 继承 EfCoreRepository是一个基类,
//用于实现基于Entity Framework Core的仓储模式。EfCoreRepository 提供了对实体进行CRUD(创建、读取、更新、删除)操作的基础实现。
public class EfCoreAuthorRepository : EfCoreRepository<BookStoreDbContext, Author, Guid>, IAuthorRepository
{
//base(dbContextProvider) 用于调用基类的构造函数,并将参数 dbContextProvider 传递给基类的构造函数。
public EfCoreAuthorRepository(IDbContextProvider<BookStoreDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public async Task<Author> FindByNameAsync(string name)
{
return await (await GetDbSetAsync()).FirstOrDefaultAsync(a => a.Name == name);
}
public async Task<List<Author>> GetAuthorsWithBooksAsync()
{
return await (await GetDbSetAsync())
.Include(a => a.Books)
.ToListAsync();
}
}
结论
在ABP框架中,仓储(Repository)提供了一套全面的方法来管理实体的CRUD操作,并支持自定义扩展以满足特定的业务需求。通过这些方法,你可以高效地执行各种数据访问和操作任务,保持代码的整洁和可维护性。
标签:predicate,false,框架,实体,autoSave,ABP,仓储,bool,Expression From: https://blog.csdn.net/weixin_44536462/article/details/139409084