- namespace Blog.Core.Repository.Base
- {public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class, new()
- {
- private DbContext context;
- private SqlSugarClient db;
- private SimpleClient<TEntity> entityDB;
- public DbContext Context
- {
- get { return context; }
- set { context = value; }
- }
- internal SqlSugarClient Db
- {
- get { return db; }
- private set { db = value; }
- }
- internal SimpleClient<TEntity> EntityDB
- {
- get { return entityDB; }
- private set { entityDB = value; }
- }
- public BaseRepository()
- {
- DbContext.Init(BaseDBConfig.ConnectionString);
- context = DbContext.GetDbContext();
- db = context.Db;
- entityDB = context.GetEntityDB<TEntity>(db);
- }
- public async Task<TEntity> QueryByID(object objId)
- {
- return await Task.Run(() => db.Queryable<TEntity>().InSingle(objId));
- }
- /// <summary>
- /// 功能描述: 根据 ID 查询一条数据
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="objId">id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]), 如果是联合主键, 请使用 Where 条件 </param>
- /// <param name="blnUseCache"> 是否使用缓存 </param>
- /// <returns> 数据实体 </returns>
- public async Task<TEntity> QueryByID(object objId, bool blnUseCache = false)
- {
- return await Task.Run(() => db.Queryable<TEntity>().WithCacheIF(blnUseCache).InSingle(objId));
- }
- /// <summary>
- /// 功能描述: 根据 ID 查询数据
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="lstIds">id 列表 (必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]), 如果是联合主键, 请使用 Where 条件 </param>
- /// <returns> 数据实体列表 </returns>
- public async Task<List<TEntity>> QueryByIDs(object[] lstIds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().In(lstIds).ToList());
- }
- /// <summary>
- /// 写入实体数据
- /// </summary>
- /// <param name="entity"> 博文实体类 </param>
- /// <returns></returns>
- public async Task<int> Add(TEntity entity)
- {
- var i = await Task.Run(() => db.Insertable(entity).ExecuteReturnBigIdentity());
- // 返回的 i 是 long 类型, 这里你可以根据你的业务需要进行处理
- return (int)i;
- }
- /// <summary>
- /// 更新实体数据
- /// </summary>
- /// <param name="entity"> 博文实体类 </param>
- /// <returns></returns>
- public async Task<bool> Update(TEntity entity)
- {
- // 这种方式会以主键为条件
- var i = await Task.Run(() => db.Updateable(entity).ExecuteCommand());
- return i> 0;
- }
- public async Task<bool> Update(TEntity entity, string strWhere)
- {
- return await Task.Run(() => db.Updateable(entity).Where(strWhere).ExecuteCommand()> 0);
- }
- public async Task<bool> Update(string strSql, SugarParameter[] parameters = null)
- {
- return await Task.Run(() => db.Ado.ExecuteCommand(strSql, parameters)> 0);
- }
- public async Task<bool> Update(
- TEntity entity,
- List<string> lstColumns = null,
- List<string> lstIgnoreColumns = null,
- string strWhere = ""
- )
- {
- IUpdateable<TEntity> up = await Task.Run(() => db.Updateable(entity));
- if (lstIgnoreColumns != null && lstIgnoreColumns.Count> 0)
- {
- up = await Task.Run(() => up.IgnoreColumns(it => lstIgnoreColumns.Contains(it)));
- }
- if (lstColumns != null && lstColumns.Count> 0)
- {
- up = await Task.Run(() => up.UpdateColumns(it => lstColumns.Contains(it)));
- }
- if (!string.IsNullOrEmpty(strWhere))
- {
- up = await Task.Run(() => up.Where(strWhere));
- }
- return await Task.Run(() => up.ExecuteCommand())> 0;
- }
- /// <summary>
- /// 根据实体删除一条数据
- /// </summary>
- /// <param name="entity"> 博文实体类 </param>
- /// <returns></returns>
- public async Task<bool> Delete(TEntity entity)
- {
- var i = await Task.Run(() => db.Deleteable(entity).ExecuteCommand());
- return i> 0;
- }
- /// <summary>
- /// 删除指定 ID 的数据
- /// </summary>
- /// <param name="id"> 主键 ID</param>
- /// <returns></returns>
- public async Task<bool> DeleteById(object id)
- {
- var i = await Task.Run(() => db.Deleteable<TEntity>(id).ExecuteCommand());
- return i> 0;
- }
- /// <summary>
- /// 删除指定 ID 集合的数据 (批量删除)
- /// </summary>
- /// <param name="ids"> 主键 ID 集合 </param>
- /// <returns></returns>
- public async Task<bool> DeleteByIds(object[] ids)
- {
- var i = await Task.Run(() => db.Deleteable<TEntity>().In(ids).ExecuteCommand());
- return i> 0;
- }
- /// <summary>
- /// 功能描述: 查询所有数据
- /// 作 者: Blog.Core
- /// </summary>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query()
- {
- return await Task.Run(() => entityDB.GetList());
- }
- /// <summary>
- /// 功能描述: 查询数据列表
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="strWhere"> 条件 </param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(string strWhere)
- {
- return await Task.Run(() => db.Queryable<TEntity>().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList());
- }
- /// <summary>
- /// 功能描述: 查询数据列表
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="whereExpression">whereExpression</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression)
- {
- return await Task.Run(() => entityDB.GetList(whereExpression));
- }
- /// <summary>
- /// 功能描述: 查询一个列表
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="whereExpression"> 条件表达式 </param>
- /// <param name="strOrderByFileds"> 排序字段, 如 name asc,age desc</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, string strOrderByFileds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToList());
- }
- /// <summary>
- /// 功能描述: 查询一个列表
- /// </summary>
- /// <param name="whereExpression"></param>
- /// <param name="orderByExpression"></param>
- /// <param name="isAsc"></param>
- /// <returns></returns>
- public async Task<List<TEntity>> Query(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression, bool isAsc = true)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList());
- }
- /// <summary>
- /// 功能描述: 查询一个列表
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="strWhere"> 条件 </param>
- /// <param name="strOrderByFileds"> 排序字段, 如 name asc,age desc</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(string strWhere, string strOrderByFileds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList());
- }
- /// <summary>
- /// 功能描述: 查询前 N 条数据
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="whereExpression"> 条件表达式 </param>
- /// <param name="intTop"> 前 N 条 </param>
- /// <param name="strOrderByFileds"> 排序字段, 如 name asc,age desc</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(
- Expression<Func<TEntity, bool>> whereExpression,
- int intTop,
- string strOrderByFileds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToList());
- }
- /// <summary>
- /// 功能描述: 查询前 N 条数据
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="strWhere"> 条件 </param>
- /// <param name="intTop"> 前 N 条 </param>
- /// <param name="strOrderByFileds"> 排序字段, 如 name asc,age desc</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(
- string strWhere,
- int intTop,
- string strOrderByFileds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToList());
- }
- /// <summary>
- /// 功能描述: 分页查询
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="whereExpression"> 条件表达式 </param>
- /// <param name="intPageIndex"> 页码 (下标 0)</param>
- /// <param name="intPageSize"> 页大小 </param>
- /// <param name="intTotalCount"> 数据总量 </param>
- /// <param name="strOrderByFileds"> 排序字段, 如 name asc,age desc</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(
- Expression<Func<TEntity, bool>> whereExpression,
- int intPageIndex,
- int intPageSize,
- string strOrderByFileds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageList(intPageIndex, intPageSize));
- }
- /// <summary>
- /// 功能描述: 分页查询
- /// 作 者: Blog.Core
- /// </summary>
- /// <param name="strWhere"> 条件 </param>
- /// <param name="intPageIndex"> 页码 (下标 0)</param>
- /// <param name="intPageSize"> 页大小 </param>
- /// <param name="intTotalCount"> 数据总量 </param>
- /// <param name="strOrderByFileds"> 排序字段, 如 name asc,age desc</param>
- /// <returns> 数据列表 </returns>
- public async Task<List<TEntity>> Query(
- string strWhere,
- int intPageIndex,
- int intPageSize,
- string strOrderByFileds)
- {
- return await Task.Run(() => db.Queryable<TEntity>().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageList(intPageIndex, intPageSize));
- }
- public async Task<List<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression,
- int intPageIndex = 0, int intPageSize = 20, string strOrderByFileds = null)
- {
- return await Task.Run(() => db.Queryable<TEntity>()
- .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
- .WhereIF(whereExpression != null, whereExpression)
- .ToPageList(intPageIndex, intPageSize));
- }
- }
- }
来源: https://www.cnblogs.com/laozhang-is-phi/p/9529480.html