using SqlSugar; using System.Linq.Expressions; namespace dy.net.repository { /// /// 通用Repository基类 /// /// 实体类型 public abstract class BaseRepository where T : class, new() { /// /// SQLSugar客户端 /// protected readonly ISqlSugarClient Db; /// /// 构造函数注入SQLSugar客户端 /// /// SQLSugar客户端实例 protected BaseRepository(ISqlSugarClient db) { Db = db; } #region 新增操作 /// /// 新增单个实体 /// /// 实体对象 /// 是否新增成功 public virtual bool Insert(T entity) { return Db.Insertable(entity).ExecuteCommand() > 0; } /// /// 新增单个实体(异步) /// /// 实体对象 /// 是否新增成功 public virtual async Task InsertAsync(T entity) { return await Db.Insertable(entity).ExecuteCommandAsync() > 0; } /// /// 批量新增实体 /// /// 实体集合 /// 新增的数量 public virtual int InsertRange(IEnumerable entities) { return Db.Insertable(entities.ToArray()).ExecuteCommand(); } /// /// 批量新增实体(异步) /// /// 实体集合 /// 新增的数量 public virtual async Task InsertRangeAsync(IEnumerable entities) { return await Db.Insertable(entities.ToArray()).ExecuteCommandAsync(); } /// /// 新增实体并返回自增ID /// /// 实体对象 /// 自增ID public virtual int InsertReturnIdentity(T entity) { return Db.Insertable(entity).ExecuteReturnIdentity(); } /// /// 新增实体并返回自增ID(异步) /// /// 实体对象 /// 自增ID public virtual async Task InsertReturnIdentityAsync(T entity) { return await Db.Insertable(entity).ExecuteReturnIdentityAsync(); } #endregion #region 删除操作 /// /// 根据主键删除 /// /// 主键值 /// 是否删除成功 public virtual bool DeleteById(object id) { return Db.Deleteable().In(id).ExecuteCommand() > 0; } /// /// 事务执行 /// /// /// /// public async Task UseTranAsync(Func action, Action errorCallBack) { var res = await Db.Ado.UseTranAsync(async () => { await action(); }, errorCallBack: errorCallBack); return res.IsSuccess; } /// /// 根据主键删除(异步) /// /// 主键值 /// 是否删除成功 public virtual async Task DeleteByIdAsync(object id) { return await Db.Deleteable().In(id).ExecuteCommandAsync() > 0; } /// /// 根据主键集合删除 /// /// 主键集合 /// 删除的数量 public virtual int DeleteByIds(IEnumerable ids) { return Db.Deleteable().In(ids).ExecuteCommand(); } /// /// 根据主键集合删除(异步) /// /// 主键集合 /// 删除的数量 public virtual async Task DeleteByIdsAsync(IEnumerable ids) { return await Db.Deleteable().In(ids).ExecuteCommandAsync(); } /// /// 根据条件删除 /// /// 删除条件 /// 删除的数量 public virtual int Delete(Expression> whereExpression) { return Db.Deleteable().Where(whereExpression).ExecuteCommand(); } /// /// 根据条件删除(异步) /// /// 删除条件 /// 删除的数量 public virtual async Task DeleteAsync(Expression> whereExpression) { return await Db.Deleteable().Where(whereExpression).ExecuteCommandAsync(); } #endregion #region 修改操作 /// /// 更新单个实体 /// /// 实体对象 /// 是否更新成功 public virtual bool Update(T entity) { return Db.Updateable(entity).ExecuteCommand() > 0; } /// /// 更新单个实体(异步) /// /// 实体对象 /// 是否更新成功 public virtual async Task UpdateAsync(T entity) { return await Db.Updateable(entity).ExecuteCommandAsync() > 0; } /// /// 批量更新实体 /// /// 实体集合 /// 更新的数量 public virtual int UpdateRange(IEnumerable entities) { return Db.Updateable(entities.ToArray()).ExecuteCommand(); } /// /// 批量更新实体(异步) /// /// 实体集合 /// 更新的数量 public virtual async Task UpdateRangeAsync(IEnumerable entities) { return await Db.Updateable(entities.ToArray()).ExecuteCommandAsync(); } /// /// 根据条件更新 /// /// 更新表达式 /// 更新条件 /// 更新的数量 public virtual int Update(Expression> updateExpression, Expression> whereExpression) { return Db.Updateable().SetColumns(updateExpression).Where(whereExpression).ExecuteCommand(); } /// /// 根据条件更新(异步) /// /// 更新表达式 /// 更新条件 /// 更新的数量 public virtual async Task UpdateAsync(Expression> updateExpression, Expression> whereExpression) { return await Db.Updateable().SetColumns(updateExpression).Where(whereExpression).ExecuteCommandAsync(); } #endregion #region 查询操作 /// /// 根据主键查询 /// /// 主键值 /// 实体对象 public virtual T GetById(object id) { return Db.Queryable().InSingle(id); } /// /// 根据主键查询(异步) /// /// 主键值 /// 实体对象 public virtual async Task GetByIdAsync(object id) { return await Db.Queryable().InSingleAsync(id); } /// /// 根据条件查询单个实体 /// /// 查询条件 /// 实体对象 public virtual T GetFirst(Expression> whereExpression) { return Db.Queryable().Where(whereExpression).First(); } /// /// 根据条件查询单个实体(异步) /// /// 查询条件 /// 实体对象 public virtual async Task GetFirstAsync(Expression> whereExpression) { return await Db.Queryable().Where(whereExpression).FirstAsync(); } /// /// 查询所有实体 /// /// 实体集合 public virtual List GetAll() { return Db.Queryable().ToList(); } /// /// 查询所有实体(异步) /// /// 实体集合 public virtual async Task> GetAllAsync() { return await Db.Queryable().ToListAsync(); } /// /// 根据条件查询实体集合 /// /// 查询条件 /// 实体集合 public virtual List GetList(Expression> whereExpression) { return Db.Queryable().Where(whereExpression).ToList(); } /// /// 根据条件查询实体集合(异步) /// /// 查询条件 /// 实体集合 public virtual async Task> GetListAsync(Expression> whereExpression) { return await Db.Queryable().Where(whereExpression).ToListAsync(); } /// /// 分页查询 /// /// 查询条件 /// 页码(从1开始) /// 每页数量 /// 总记录数 /// 分页实体集合 public virtual List GetPageList(Expression> whereExpression, int pageIndex, int pageSize, out int totalCount) { var queryable = Db.Queryable().Where(whereExpression); totalCount = queryable.Count(); return queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } /// /// 分页查询(带排序) /// /// 查询条件 /// 排序表达式 /// 是否升序 /// 页码(从1开始) /// 每页数量 /// 总记录数 /// 分页实体集合 public virtual List GetPageList(Expression> whereExpression, Expression> orderByExpression, bool isAsc, int pageIndex, int pageSize, out int totalCount) { var queryable = Db.Queryable().Where(whereExpression); if (isAsc) { queryable = queryable.OrderBy(orderByExpression); } else { queryable = queryable.OrderByDescending(orderByExpression); } totalCount = queryable.Count(); return queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } /// /// 分页查询(异步) /// /// 查询条件 /// 页码(从1开始) /// 每页数量 /// 分页结果(实体集合和总记录数) public virtual async Task<(List list, int totalCount)> GetPageListAsync(Expression> whereExpression, int pageIndex, int pageSize) { var queryable = Db.Queryable().Where(whereExpression); var totalCount = await queryable.CountAsync(); var list = await queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(); return (list, totalCount); } /// /// 判断是否存在符合条件的记录 /// /// 查询条件 /// 是否存在 public virtual bool Exists(Expression> whereExpression) { return Db.Queryable().Where(whereExpression).Any(); } /// /// 判断是否存在符合条件的记录(异步) /// /// 查询条件 /// 是否存在 public virtual async Task ExistsAsync(Expression> whereExpression) { return await Db.Queryable().Where(whereExpression).AnyAsync(); } /// /// 获取符合条件的记录数量 /// /// 查询条件 /// 记录数量 public virtual int Count(Expression> whereExpression = null) { return whereExpression == null ? Db.Queryable().Count() : Db.Queryable().Where(whereExpression).Count(); } /// /// 获取符合条件的记录数量(异步) /// /// 查询条件 /// 记录数量 public virtual async Task CountAsync(Expression> whereExpression = null) { return whereExpression == null ? await Db.Queryable().CountAsync() : await Db.Queryable().Where(whereExpression).CountAsync(); } #endregion #region 高级查询 /// /// 自定义查询(返回IQueryable,可继续拼接查询条件) /// /// 初始查询条件 /// IQueryable对象 public virtual ISugarQueryable Query(Expression> whereExpression = null) { var query = Db.Queryable(); return whereExpression != null ? query.Where(whereExpression) : query; } #endregion } }