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 models); /// /// 按主键标记实体删除 /// /// /// /// void Delete(T model) where T : class; /// /// 按主键标记实体删除 /// /// /// void Delete(object model); /// ///批量删除实体 /// /// void DeleteRanage(IEnumerable models); /// /// 更新操作 /// /// /// /// void Update(T model) where T : class; /// /// 根据主键更新指定字段,使用时需要注意EFCore的仓储机制可能会使数据库和缓存仓的数据不一致。 /// /// 映射类 /// 更新的实体 /// 要更新的属性, VisualStudio在这里有Bug, 不能智能显示类型属性, 但不影响使用 /// void Update(T model, Expression> property) where T : class; /// /// 更新操作 /// /// /// void Update(object model); /// /// 批量更新实体 /// /// void UpdateRanage(IEnumerable models); /// /// 执行存储过程,返回存储过程中返回的数据表 /// /// 存储过程名 /// 参数 /// 返回的数据表集合 List CallProcedure(string procName, params DbParameter[] parameters); /// /// 执行存储过程,返回存储过程中返回的数据表 /// /// 存储过程名 /// 参数 /// 返回的数据表集合 Task?> CallProcedureAsync(string procName, params DbParameter[] parameters); /// /// 提交对数据进行的处理,如无处理返回-1 /// /// int Save(); /// /// 提交对数据进行的处理,如无处理返回-1 /// /// Task SaveAsync(); ///// ///// 异步获取一个事务对象 ///// ///// //Task BeginTransactionAsync(); ///// ///// 获取一个事务对象 ///// ///// //IDbContextTransaction BeginTransaction(); /// /// 不跟踪实体状态(针对DbContext所用) /// /// void UntrackEntities(IEnumerable models); /// /// 不跟踪实体状态(针对DbContext所用) /// /// void UntrackEntities(object model); } }