using System.Linq.Expressions; namespace DramaLing.Api.Contracts.Repositories; /// /// 泛型 Repository 介面,提供基本的 CRUD 操作 /// /// 實體類型 public interface IRepository where T : class { // 查詢操作 Task GetByIdAsync(object id); Task> GetAllAsync(); Task> FindAsync(Expression> predicate); Task FirstOrDefaultAsync(Expression> predicate); Task ExistsAsync(Expression> predicate); Task CountAsync(Expression>? predicate = null); // 分頁查詢 Task<(IEnumerable Items, int TotalCount)> GetPagedAsync( int pageNumber, int pageSize, Expression>? filter = null, Func, IOrderedQueryable>? orderBy = null); // 修改操作 Task AddAsync(T entity); Task> AddRangeAsync(IEnumerable entities); Task UpdateAsync(T entity); Task UpdateRangeAsync(IEnumerable entities); Task DeleteAsync(T entity); Task DeleteAsync(object id); Task DeleteRangeAsync(IEnumerable entities); // 工作單元 Task SaveChangesAsync(); }