欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > ABP框架8——仓储的作用及其基础Demo

ABP框架8——仓储的作用及其基础Demo

2025/12/19 12:36:54 来源:https://blog.csdn.net/m0_67412019/article/details/144859727  浏览:    关键词:ABP框架8——仓储的作用及其基础Demo

一、使用仓储的好处

  • 1.提高CRUD接口复用性
  • 2.解耦业务逻辑(BLL)和增删改查(CRUD),换ORM特别方便,不需要改应用层,直接改仓储层
  • 3.做复杂查询
  • 4.事务支持

二、Demo

public class BookRepository : IBookRepository, ITransientDependency  //接口依赖注入
{private readonly IFreeSql _fsql;public BookRepository(IFreeSql fsql){_fsql = fsql;}/// <summary>/// 获取FreeSql/// </summary>/// <param name="input"></param>/// <returns></returns>public IFreeSql GetFreeSql(){return _fsql;}/// <summary>/// 分页查询:Book/// </summary>/// <param name="input"></param>/// <returns></returns>[HttpPost][Route(nameof(GetBookPageListAsync))]public async Task<IPageList<BookDto>> GetBookPageListAsync(BookSerachInput input){var output = new PageList<BookDto>(new List<BookDto>(), input.PageIndex, input.maxResultCount);if (false){return output;//不符合要求,返回空数据}var fsql = GetFreeSql();//查表var queryList = await fsql.Select<Book>().Where(x => x.TimePoint.Between(input.StartTime, input.EndTime)).WhereIf(input.StationCodes.Any(), x => input.StationCodes.Contains(x.CityCode)).OrderBy(!string.IsNullOrEmpty(input.orderby), input.orderby).Page(input.PageIndex, input.maxResultCount).Count(out var totalCount).ToListAsync();//映射结果var dtoList = _objectMapper.Map<List<Book>, List<BookDto>>(queryList);return new PageList<BookDto>(dtoList, input.PageIndex, input.maxResultCount, totalCount);}/// <summary>/// Book 单一实体 修改/// </summary>public async Task<bool> UpdateBookAsync(BookDto input){var fsql = GetFreeSql();return fsql.Update<BookDto>(input).ExecuteAffrows() != 0;}/// <summary>/// Book 单一实体 保存/// </summary>public async Task<bool> SaveBookAsync(BookDto input){var fsql = GetFreeSql();bool isExist = await fsql.Select<Book>().AnyAsync(x => x.Id == input.Id);//【根据实际修改】根据(联合)主键确定唯一性if (isExist){return await UpdateBookAsync(input);}return await InsertBookAsync(input);}/// <summary>/// Book 单一实体 插入/// </summary>public async Task<bool> InsertBookAsync(BookDto input){var fsql = GetFreeSql();return fsql.Insert(input).ExecuteAffrows() != 0;}/// <summary>/// Book 单一实体 删除/// </summary>public async Task<bool> DeleteBookAsync(BookDto input){var fsql = GetFreeSql();return fsql.Delete<BookDto>(input).ExecuteAffrows() != 0;}/// <summary>/// Book 列表 保存/// </summary>public async Task<bool> SaveBookListAsync(List<BookDto> inputList){bool result = true;var fsql = GetFreeSql();//获取输入主键var inputKeyList = inputList.Select(x => x.Id ).Distinct().ToList();//根据输入主键获取已存在实体var existList = await fsql.Select<Book>().Where(x => inputKeyList.Contains(x.Id)).ToListAsync();//获取已存在实体的主键列表var existKeyList = existList.Select(x => x.Id).Distinct().ToList();// 获取更新列表和插入列表var updateList = inputList.Where(x => existKeyList.Contains(x.Id)).ToList();var insertList = inputList.Where(x => !existKeyList.Contains(x.Id)).ToList();/*联合主键://获取输入主键var inputKeyList = inputList.Select(x => new { x.Id , x.BookName }).Distinct().ToList();//根据输入主键获取已存在实体var existList = await fsql.Select<Book>().Where(x=> inputKeyList.Any(key=>key.Id == x.Id && key.BookName == x.BookName)).ToListAsync();//获取已存在实体的主键列表var existKeyList = existList.Select(x => new { x.Id, x.BookName }).Distinct().ToList();//获取更新列表和插入列表var updateList = inputList.Where(x => existKeyList.Contains(new { x.Id, x.BookName })).ToList();var insertList = inputList.Where(x => !existKeyList.Contains(new { x.Id, x.BookName })).ToList();*/// 使用批量更新和批量插入方法bool updateSuccess = await UpdateBookListAsync(updateList);  // 批量更新bool insertSuccess = await InsertBookListAsync(insertList);  // 批量插入return updateSuccess && insertSuccess; // 返回是否全部成功}/// <summary>/// Book 列表 修改/// </summary>public async Task<bool> UpdateBookListAsync(List<BookDto> input){var fsql = GetFreeSql();return fsql.Update<BookDto>(input).ExecuteAffrows() != 0;}/// <summary>/// Book 列表 插入/// </summary>public async Task<bool> InsertBookListAsync(List<BookDto> input){var fsql = GetFreeSql();return fsql.Insert(input).ExecuteAffrows() != 0;}/// <summary>/// Book 列表 删除/// </summary>public async Task<bool> DeleteBookListAsync(List<BookDto> input){var fsql = GetFreeSql();return fsql.Delete<BookDto>(input).ExecuteAffrows() != 0;}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词