using System.Linq.Expressions;
using SqlSugar;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
namespace Yi.Framework.SqlSugarCore.Abstractions
{
///
/// SqlSugar仓储接口
///
/// 实体类型
public interface ISqlSugarRepository : IRepository, IUnitOfWorkEnabled
where TEntity : class, IEntity, new()
{
#region 数据库访问器
///
/// 获取SqlSugar客户端实例
///
ISqlSugarClient _Db { get; }
///
/// 获取查询构造器
///
ISugarQueryable _DbQueryable { get; }
///
/// 异步获取数据库上下文
///
Task GetDbContextAsync();
///
/// 获取删除操作构造器
///
Task> AsDeleteable();
///
/// 获取插入操作构造器
///
Task> AsInsertable(TEntity entity);
///
/// 获取批量插入操作构造器
///
Task> AsInsertable(List entities);
///
/// 获取查询构造器
///
Task> AsQueryable();
///
/// 获取SqlSugar客户端
///
Task AsSugarClient();
///
/// 获取租户操作接口
///
Task AsTenant();
///
/// 获取更新操作构造器
///
Task> AsUpdateable();
///
/// 获取实体更新操作构造器
///
Task> AsUpdateable(TEntity entity);
///
/// 获取批量更新操作构造器
///
Task> AsUpdateable(List entities);
#endregion
#region 查询操作
///
/// 根据主键获取实体
///
Task GetByIdAsync(dynamic id);
///
/// 获取满足条件的单个实体
///
Task GetSingleAsync(Expression> predicate);
///
/// 获取满足条件的第一个实体
///
Task GetFirstAsync(Expression> predicate);
///
/// 判断是否存在满足条件的实体
///
Task IsAnyAsync(Expression> predicate);
///
/// 获取满足条件的实体数量
///
Task CountAsync(Expression> predicate);
///
/// 获取所有实体
///
Task> GetListAsync();
///
/// 获取满足条件的所有实体
///
Task> GetListAsync(Expression> predicate);
#endregion
#region 分页查询
///
/// 获取分页数据
///
Task> GetPageListAsync(
Expression> predicate,
int pageIndex,
int pageSize);
///
/// 获取排序的分页数据
///
Task> GetPageListAsync(
Expression> predicate,
int pageIndex,
int pageSize,
Expression>? orderByExpression = null,
OrderByType orderByType = OrderByType.Asc);
#endregion
#region 插入操作
///
/// 插入实体
///
Task InsertAsync(TEntity entity);
///
/// 插入或更新实体
///
Task InsertOrUpdateAsync(TEntity entity);
///
/// 批量插入或更新实体
///
Task InsertOrUpdateAsync(List entities);
///
/// 插入实体并返回自增主键
///
Task InsertReturnIdentityAsync(TEntity entity);
///
/// 插入实体并返回长整型自增主键
///
Task InsertReturnBigIdentityAsync(TEntity entity);
///
/// 插入实体并返回雪花ID
///
Task InsertReturnSnowflakeIdAsync(TEntity entity);
///
/// 插入实体并返回实体
///
Task InsertReturnEntityAsync(TEntity entity);
///
/// 批量插入实体
///
Task InsertRangeAsync(List entities);
#endregion
#region 更新操作
///
/// 更新实体
///
Task UpdateAsync(TEntity entity);
///
/// 批量更新实体
///
Task UpdateRangeAsync(List entities);
///
/// 条件更新指定列
///
Task UpdateAsync(
Expression> columns,
Expression> predicate);
#endregion
#region 删除操作
///
/// 删除实体
///
Task DeleteAsync(TEntity entity);
///
/// 批量删除实体
///
Task DeleteAsync(List entities);
///
/// 条件删除
///
Task DeleteAsync(Expression> predicate);
///
/// 根据主键删除
///
Task DeleteByIdAsync(dynamic id);
///
/// 根据主键批量删除
///
Task DeleteByIdsAsync(dynamic[] ids);
#endregion
}
///
/// SqlSugar仓储接口(带主键)
///
/// 实体类型
/// 主键类型
public interface ISqlSugarRepository :
ISqlSugarRepository,
IRepository
where TEntity : class, IEntity, new()
{
}
}