using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace CloudBuilder.Core.DatabaseAccessor.Entity { /// /// 定义实体仓储模型的数据标准操作 /// /// 实体类型 /// 主键类型 public interface IRepository where TEntity : class { /// /// 实体集合 /// DbSet Entities { get; } /// /// 不跟踪的(脱轨)实体 /// IQueryable DetachedEntities { get; } /// /// 服务提供器 /// IServiceProvider ServiceProvider { get; } /// /// 事务 /// IUnitOfWork UnitOfWork { get; set; } DbContext GetDbContext(); K GetRepository(); /// /// 动态改变主数据库 /// void ChangeMasterDatabase(); /// /// 动态改变主数据库 /// void ChangeSecondaryDatabase(); #region FromSqlRaw IQueryable FromSql(string sql, params object[] parameters); IQueryable FromSqlWhere(TEntity t, string where, params object[] parameters); TEntity[] FindBySql(string sql, params object[] parameters); TEntity[] FindBySqlWhere(TEntity t, string where, params object[] parameters); void PackSqlParameter(List parameters, string parameterName, object value); void ExecuteNonQuery(string sql, params object[] parameters); object ExecuteScalar(string sql, params object[] parameters); DataTable SelectDataTable(string sql, params object[] parameters); #endregion #region Insert EntityEntry Insert(TEntity entity); void Insert(params TEntity[] entities); void Insert(IEnumerable entities); Task> InsertAsync(TEntity entity, CancellationToken cancellationToken = default); Task InsertAsync(params TEntity[] entities); Task InsertAsync(IEnumerable entities, CancellationToken cancellationToken = default); EntityEntry InsertNow(TEntity entity); void InsertNow(params TEntity[] entities); void InsertNow(IEnumerable entities); Task> InsertNowAsync(TEntity entity, CancellationToken cancellationToken = default); Task InsertNowAsync(params TEntity[] entities); Task InsertNowAsync(TEntity[] entities, CancellationToken cancellationToken = default); Task InsertNowAsync(IEnumerable entities, CancellationToken cancellationToken = default); int SaveNow(); Task SaveNowAsync(CancellationToken cancellationToken = default); #endregion #region Update EntityEntry Update(TEntity entity); void Update(params TEntity[] entities); void Update(IEnumerable entities); Task> UpdateAsync(TEntity entity); Task UpdateAsync(params TEntity[] entities); Task UpdateAsync(IEnumerable entities); EntityEntry UpdateNow(TEntity entity); void UpdateNow(params TEntity[] entities); void UpdateNow(IEnumerable entities); Task> UpdateNowAsync(TEntity entity, CancellationToken cancellationToken = default); Task UpdateNowAsync(params TEntity[] entities); Task UpdateNowAsync(TEntity[] entities, CancellationToken cancellationToken = default); Task UpdateNowAsync(IEnumerable entities, CancellationToken cancellationToken = default); EntityEntry UpdateInclude(TEntity entity, IEnumerable propertyNames); EntityEntry UpdateInclude(TEntity entity, IEnumerable>> propertyPredicates); Task> UpdateIncludeAsync(TEntity entity, string[] propertyNames); Task> UpdateIncludeAsync(TEntity entity, Expression>[] propertyPredicates); Task> UpdateIncludeAsync(TEntity entity, IEnumerable propertyNames); Task> UpdateIncludeAsync(TEntity entity, IEnumerable>> propertyPredicates); EntityEntry UpdateIncludeNow(TEntity entity, string[] propertyNames); EntityEntry UpdateIncludeNow(TEntity entity, Expression>[] propertyPredicates); EntityEntry UpdateIncludeNow(TEntity entity, IEnumerable propertyNames); EntityEntry UpdateIncludeNow(TEntity entity, IEnumerable>> propertyPredicates); Task> UpdateIncludeNowAsync(TEntity entity, string[] propertyNames, CancellationToken cancellationToken = default); Task> UpdateIncludeNowAsync(TEntity entity, Expression>[] propertyPredicates, CancellationToken cancellationToken = default); Task> UpdateIncludeNowAsync(TEntity entity, IEnumerable propertyNames, CancellationToken cancellationToken = default); Task> UpdateIncludeNowAsync(TEntity entity, IEnumerable>> propertyPredicates, CancellationToken cancellationToken = default); EntityEntry UpdateExclude(TEntity entity, IEnumerable propertyNames); EntityEntry UpdateExclude(TEntity entity, IEnumerable>> propertyPredicates); Task> UpdateExcludeAsync(TEntity entity, string[] propertyNames); Task> UpdateExcludeAsync(TEntity entity, Expression>[] propertyPredicates); Task> UpdateExcludeAsync(TEntity entity, IEnumerable propertyNames); Task> UpdateExcludeAsync(TEntity entity, IEnumerable>> propertyPredicates); EntityEntry UpdateExcludeNow(TEntity entity, string[] propertyNames); EntityEntry UpdateExcludeNow(TEntity entity, Expression>[] propertyPredicates); EntityEntry UpdateExcludeNow(TEntity entity, IEnumerable propertyNames); EntityEntry UpdateExcludeNow(TEntity entity, IEnumerable>> propertyPredicates); Task> UpdateExcludeNowAsync(TEntity entity, string[] propertyNames, CancellationToken cancellationToken = default); Task> UpdateExcludeNowAsync(TEntity entity, Expression>[] propertyPredicates, CancellationToken cancellationToken = default); Task> UpdateExcludeNowAsync(TEntity entity, IEnumerable propertyNames, CancellationToken cancellationToken = default); Task> UpdateExcludeNowAsync(TEntity entity, IEnumerable>> propertyPredicates, CancellationToken cancellationToken = default); #endregion #region Delete EntityEntry Delete(TEntity entity); void Delete(params TEntity[] entities); void Delete(IEnumerable entities); Task> DeleteAsync(TEntity entity); Task DeleteAsync(params TEntity[] entities); Task DeleteAsync(IEnumerable entities); EntityEntry DeleteNow(TEntity entity); void DeleteNow(params TEntity[] entities); void DeleteNow(IEnumerable entities); Task> DeleteNowAsync(TEntity entity, CancellationToken cancellationToken = default); Task DeleteNowAsync(params TEntity[] entities); Task DeleteNowAsync(TEntity[] entities, CancellationToken cancellationToken = default); Task DeleteNowAsync(IEnumerable entities, CancellationToken cancellationToken = default); #endregion } }