|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- using System.Data;
- using System.Data.Common;
- using System.Linq.Expressions;
-
- namespace HealthMonitor.Core.Dal
- {
- /// <summary>
- /// 数据接入层接口
- /// </summary>
- public interface IDataAccessor : IWithDataSchema, IDisposable
- {
- /// <summary>
- /// 是否已关闭
- /// </summary>
- /// <returns></returns>
- bool IsClose();
-
- /// <summary>
- /// 关闭连接
- /// </summary>
- void Close();
-
- /// <summary>
- /// 获取第一个符合条件的实体,或返回null
- /// </summary>
- /// <param name="expression"></param>
- /// <returns></returns>
- T? GetFirstOrDefault<T>(Expression<Func<T, bool>> expression) where T : class;
-
- Task<T> GetFirstOrDefaultAsync<T>(Expression<Func<T, bool>> expression) where T : class;
-
- /// <summary>
- /// 根据主键值来查询某条记录,单主键的表可直接输入主键,多主键的表注意主键次序
- /// </summary>
- /// <typeparam name="T">实体类型</typeparam>
- /// <param name="values">主键值</param>
- /// <returns>返回主键值为传入值的实体</returns>
- T GetByID<T>(params object[] values) where T : class;
-
- /// <summary>
- /// 根据主键值来查询某条记录,单主键的表可直接输入主键,多主键的表注意主键次序
- /// </summary>
- /// <typeparam name="T">实体类型</typeparam>
- /// <param name="values">主键值</param>
- /// <returns>返回主键值为传入值的实体</returns>
- Task<T> GetByIDAsync<T>(params object[] values) where T : class;
-
- /// <summary>
- /// 获取某个表的所有数据
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- IQueryable<T> GetAll<T>() where T : class;
-
- /// <summary>
- /// 根据表达式进行查询返回结果
- /// </summary>
- /// <typeparam name="T">查询的类</typeparam>
- /// <param name="expression">查询表达式</param>
- /// <returns></returns>
- IQueryable<T> GetMany<T>(Expression<Func<T, bool>> expression) where T : class;
-
- /// <summary>
- /// 根据某个字段的值进行排序
- /// </summary>
- /// <typeparam name="T">排序后获得的集合的类型</typeparam>
- /// <typeparam name="TKey">排序字段的类型</typeparam>
- /// <param name="orderExpression">字段表达式 如:basicInfo下根据caseID排序(s=>s.caseID)</param>
- /// <param name="isASC">是否升序</param>
- /// <returns></returns>
- IEnumerable<T> Order<T, TKey>(Func<T, TKey> orderExpression, bool isASC = false) where T : class;
-
- /// <summary>
- /// 在数据库中进行分页查询
- /// </summary>
- /// <typeparam name="T">查询的类</typeparam>
- /// <typeparam name="Tkey">查询类的主键类型</typeparam>
- /// <param name="pageSize">每页条数</param>
- /// <param name="pageIdx">当前页</param>
- /// <param name="expression">查询表达式</param>
- /// <param name="orderExpression"></param>
- /// <returns></returns>
- List<T> GetPageList<T, Tkey>(int pageSize, int pageIdx, Expression<Func<T, bool>> expression, Func<T, Tkey> orderExpression) where T : class;
-
- /// <summary>
- /// 在数据库中进行分页查询
- /// </summary>
- /// <typeparam name="T">查询的类</typeparam>
- /// <typeparam name="Tkey">查询类的主键类型</typeparam>
- /// <param name="pageSize">页大小</param>
- /// <param name="pageIdx">页下标</param>
- /// <param name="expression">查询表达式</param>
- /// <param name="orderExpression">排序表达式</param>
- /// <returns>分页查询结果</returns>
- Task<List<T>> GetPageListAsync<T, Tkey>(int pageSize, int pageIdx, Expression<Func<T, bool>> expression, Func<T, Tkey> orderExpression) where T : class;
-
- /// <summary>
- /// 获取条目数
- /// </summary>
- /// <typeparam name="T">查询的类</typeparam>
- /// <param name="expression">查询表达式</param>
- /// <returns>条目数</returns>
- int GetCount<T>(Expression<Func<T, bool>> expression) where T : class;
-
- /// <summary>
- /// 获取条目数
- /// </summary>
- /// <typeparam name="T">查询的类</typeparam>
- /// <param name="expression">查询表达式</param>
- /// <returns>条目数</returns>
- Task<int> GetCountAsync<T>(Expression<Func<T, bool>> expression) where T : class;
-
- /// <summary>
- /// 插入数据,保存并更新其自增键
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="model"></param>
- /// <returns></returns>
- T AddWithIdentity<T>(T model) where T : class;
-
- /// <summary>
- /// 插入数据,保存并更新其自增键
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="model"></param>
- /// <returns></returns>
- Task<T> AddWithIdentityAsync<T>(T model) where T : class;
-
- /// <summary>
- /// 向上下文增加记录,但不保存,需要手动调用Save
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="model"></param>
- /// <returns></returns>
- void Add<T>(T model) where T : class;
-
- /// <summary>
- /// 向上下文增加记录,但不保存,需要手动调用Save
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- void Add(object model);
-
- /// <summary>
- /// 批量插入实体
- /// </summary>
- /// <param name="models"></param>
- void AddRange(IEnumerable<object> models);
-
- /// <summary>
- /// 按主键标记实体删除
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="model"></param>
- /// <returns></returns>
- void Delete<T>(T model) where T : class;
-
- /// <summary>
- /// 按主键标记实体删除
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- void Delete(object model);
-
- /// <summary>
- ///批量删除实体
- /// </summary>
- /// <param name="models"></param>
- void DeleteRanage(IEnumerable<object> models);
-
- /// <summary>
- /// 更新操作
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="model"></param>
- /// <returns></returns>
- void Update<T>(T model) where T : class;
-
- /// <summary>
- /// 根据主键更新指定字段,使用时需要注意EFCore的仓储机制可能会使数据库和缓存仓的数据不一致。
- /// </summary>
- /// <typeparam name="T">映射类</typeparam>
- /// <param name="model">更新的实体</param>
- /// <param name="property">要更新的属性, VisualStudio在这里有Bug, 不能智能显示类型属性, 但不影响使用</param>
- /// <returns></returns>
- void Update<T>(T model, Expression<Func<T, object>> property) where T : class;
-
- /// <summary>
- /// 更新操作
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- void Update(object model);
-
- /// <summary>
- /// 批量更新实体
- /// </summary>
- /// <param name="models"></param>
- void UpdateRanage(IEnumerable<object> models);
-
- /// <summary>
- /// 执行存储过程,返回存储过程中返回的数据表
- /// </summary>
- /// <param name="procName">存储过程名</param>
- /// <param name="parameters">参数</param>
- /// <returns>返回的数据表集合</returns>
- List<DataTable> CallProcedure(string procName, params DbParameter[] parameters);
-
- /// <summary>
- /// 执行存储过程,返回存储过程中返回的数据表
- /// </summary>
- /// <param name="procName">存储过程名</param>
- /// <param name="parameters">参数</param>
- /// <returns>返回的数据表集合</returns>
- Task<List<DataTable>?> CallProcedureAsync(string procName, params DbParameter[] parameters);
-
- /// <summary>
- /// 提交对数据进行的处理,如无处理返回-1
- /// </summary>
- /// <returns></returns>
- int Save();
-
- /// <summary>
- /// 提交对数据进行的处理,如无处理返回-1
- /// </summary>
- /// <returns></returns>
- Task<int> SaveAsync();
-
- ///// <summary>
- ///// 异步获取一个事务对象
- ///// </summary>
- ///// <returns></returns>
- //Task<IDbContextTransaction> BeginTransactionAsync();
-
- ///// <summary>
- ///// 获取一个事务对象
- ///// </summary>
- ///// <returns></returns>
- //IDbContextTransaction BeginTransaction();
-
- /// <summary>
- /// 不跟踪实体状态(针对DbContext所用)
- /// </summary>
- /// <param name="models"></param>
- void UntrackEntities(IEnumerable<object> models);
-
- /// <summary>
- /// 不跟踪实体状态(针对DbContext所用)
- /// </summary>
- /// <param name="models"></param>
- void UntrackEntities(object model);
- }
- }
|