using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
namespace HealthMonitor.Core.Dal
{
///
/// 数据接入层接口
///
public interface IDataAccessor : IWithDataSchema, IDisposable
{
///
/// 是否已关闭
///
///
bool IsClose();
///
/// 关闭连接
///
void Close();
///
/// 获取第一个符合条件的实体,或返回null
///
///
///
T? GetFirstOrDefault(Expression> expression) where T : class;
Task GetFirstOrDefaultAsync(Expression> expression) where T : class;
///
/// 根据主键值来查询某条记录,单主键的表可直接输入主键,多主键的表注意主键次序
///
/// 实体类型
/// 主键值
/// 返回主键值为传入值的实体
T GetByID(params object[] values) where T : class;
///
/// 根据主键值来查询某条记录,单主键的表可直接输入主键,多主键的表注意主键次序
///
/// 实体类型
/// 主键值
/// 返回主键值为传入值的实体
Task GetByIDAsync(params object[] values) where T : class;
///
/// 获取某个表的所有数据
///
///
///
IQueryable GetAll() where T : class;
///
/// 根据表达式进行查询返回结果
///
/// 查询的类
/// 查询表达式
///
IQueryable GetMany(Expression> expression) where T : class;
///
/// 根据某个字段的值进行排序
///
/// 排序后获得的集合的类型
/// 排序字段的类型
/// 字段表达式 如:basicInfo下根据caseID排序(s=>s.caseID)
/// 是否升序
///
IEnumerable Order(Func orderExpression, bool isASC = false) where T : class;
///
/// 在数据库中进行分页查询
///
/// 查询的类
/// 查询类的主键类型
/// 每页条数
/// 当前页
/// 查询表达式
///
///
List GetPageList(int pageSize, int pageIdx, Expression> expression, Func orderExpression) where T : class;
///
/// 在数据库中进行分页查询
///
/// 查询的类
/// 查询类的主键类型
/// 页大小
/// 页下标
/// 查询表达式
/// 排序表达式
/// 分页查询结果
Task> GetPageListAsync(int pageSize, int pageIdx, Expression> expression, Func orderExpression) where T : class;
///
/// 获取条目数
///
/// 查询的类
/// 查询表达式
/// 条目数
int GetCount(Expression> expression) where T : class;
///
/// 获取条目数
///
/// 查询的类
/// 查询表达式
/// 条目数
Task GetCountAsync(Expression> expression) where T : class;
///
/// 插入数据,保存并更新其自增键
///
///
///
///
T AddWithIdentity(T model) where T : class;
///
/// 插入数据,保存并更新其自增键
///
///
///
///
Task AddWithIdentityAsync(T model) where T : class;
///
/// 向上下文增加记录,但不保存,需要手动调用Save
///
///
///
///
void Add(T model) where T : class;
///
/// 向上下文增加记录,但不保存,需要手动调用Save
///
///
///
void Add(object model);
///
/// 批量插入实体
///
///
void AddRange(IEnumerable