using learun.util;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
namespace learun.database
{
///
/// 版 本 EasyCode EC管理后台
/// Copyright (c) 2019-present EC管理有限公司
/// 创建人:tobin
/// 日 期:2019.09.05
/// 描 述:数据库接口类
///
public interface IDataBase
{
#region 事务
///
/// 开启事务
///
///
IDataBase BeginTrans();
///
/// 提交
///
///
void Commit();
///
/// 回滚
///
void Rollback();
///
/// 关闭
///
void Close();
#endregion 事务
#region 执行sql语句
///
/// 执行sql语句(带参数)
///
/// sql语句
/// 参数
///
Task ExecuteSql(string strSql, object param = null);
#endregion 执行sql语句
#region 执行存储过程
///
/// 执行存储过程
///
/// 存储过程名称
/// 参数
///
Task ExecuteProc(string procName, object param = null);
///
/// 执行存储过程(查询实体数据)
///
/// 存储过程名称
/// 参数
///
Task ExecuteProc(string procName, object param = null) where T : class;
///
/// 执行存储过程(查询实体数据)
///
///
/// 存储过程名称.
/// 参数
Task QueryFirstProc(string procName, object param = null);
///
/// 执行存储过程(获取列表数据)
///
/// 存储过程名称
/// 参数
///
Task> QueryProc(string procName, object param = null) where T : class;
///
/// 执行存储过程(获取列表数据)
///
/// 存储过程名称
/// 参数
///
Task> QueryProc(string procName, object param = null);
#endregion 执行存储过程
#region 对像实体 新增/修改/删除
///
/// 插入实体数据
///
/// 类型
/// 实体数据
///
Task Insert(T entity) where T : class;
///
/// 更新实体数据
///
///
/// 实体数据
/// 是否只更新有值的字段
/// 类型
Task Update(T entity, bool isOnlyHasValue = false) where T : class;
///
/// 删除实体数据
///
///
/// 实体数据
/// 类型
Task Delete(T entity) where T : class;
///
/// 删除数据根据给定的字段值
///
///
/// 参数
/// 类型
Task DeleteAny(object param) where T : class;
#endregion 对像实体 新增/修改/删除
#region 对象实体查询
///
/// 获取单个实体数据
///
/// 单个实体数据
/// 主键
/// 类
Task FindEntityByKey(object keyValue) where T : class;
///
/// 获取单个实体数据
///
/// 单个实体数据
/// sql语句
/// 参数
/// 类
Task FindEntity(string sql, object param = null) where T : class;
///
/// 获取单个实体数据
///
/// 单个实体数据
/// 参数
/// 类
Task FindEntity(object param = null) where T : class;
///
/// 获取单个实体数据
///
/// 单个实体数据
/// sql语句.
/// 参数.
Task FindEntity(string sql, object param = null);
///
/// 获取数据列表
///
/// 列表数据
/// sql语句.
/// 参数.
/// 类型.
Task> FindList(string sql, object param = null) where T : class;
///
/// 获取数据列表
///
/// 列表数据
/// 参数.
/// 类型.
Task> FindList(object param) where T : class;
///
/// 获取数据列表
///
/// 列表数据
/// sql语句.
/// 参数.
Task> FindList(string sql, object param = null);
///
/// 获取数据列表(分页)
///
/// 列表数据
/// sql语句
/// 参数
/// 排序字段
/// 排序类型
/// 每页数据条数
/// 页码
/// 类
Task<(IEnumerable list, int total)> FindList(string sql, object param, string orderField, bool isAsc, int pageSize, int pageIndex) where T : class;
///
/// 获取数据列表(分页)
///
/// 类
/// sql语句
/// 参数
/// 分页参数
///
Task> FindList(string sql, object param, Pagination pagination) where T : class;
///
/// 获取数据列表(分页)
///
/// 列表数据
/// sql语句
/// 参数
/// 排序字段
/// 排序类型
/// 每页数据条数
/// 页码
Task<(IEnumerable list, int total)> FindList(string sql, object param, string orderField, bool isAsc, int pageSize, int pageIndex);
///
/// 获取数据列表(分页)
///
/// sql语句
/// 参数
/// 分页参数
///
Task> FindList(string sql, object param, Pagination pagination);
///
/// 获取表的所有数据
///
/// 列表数据
/// 类
Task> FindAll() where T : class;
#endregion 对象实体查询
#region 数据源查询
///
/// 查询方法,返回datatable
///
/// datatable数据
/// sql语句
/// 参数
Task FindTable(string sql, object param = null);
///
/// 分页查询方法,返回datatable
///
/// sql语句
/// 参数
/// 排序字段
/// 排序类型
/// 每页数据条数
/// 页码
/// list数据,total 总共条数
Task<(DataTable list, int total)> FindTable(string sql, object param, string orderField, bool isAsc, int pageSize, int pageIndex);
///
/// 分页查询方法,返回datatable
///
/// sql语句
/// 参数
/// 分页参数
///
Task FindTable(string sql, object param, Pagination pagination);
#endregion 数据源查询
#region 获取数据库表信息
///
/// 获取数据库表信息
///
/// 数据库表信息
Task> GetDataBaseTable();
///
/// 获取表的字段信息
///
/// 表的字段信息
/// 表名
Task> GetDataBaseTableFields(string tableName);
///
/// 获取数据库地址信息
///
/// 数据库地址信息
string GetDataSource();
///
/// 测试数据库是否能链接成功
///
/// The connection.
string TestConnection();
///
/// 获取sql语句的字段
///
/// sql语句
///
Task> GetSqlColName(string strSql);
#endregion 获取数据库表信息
}
}