itfx/src/InterfaceForward.Repositories/IBasicRepository.cs
2025-07-17 11:07:39 +08:00

103 lines
3.2 KiB
C#

using System.Linq.Expressions;
using Fake.Domain.Entities;
using Fake.DomainDrivenDesign.Repositories.SqlSugarCore;
namespace InterfaceForward.Repositories;
public interface IBasicRepository<T>: ISqlSugarRepository<InterfaceForwardDbContext, T> where T : class, IAggregateRoot, new()
{
public ISugarQueryable<T> AsQueryable();
/// <summary>
/// top 1
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
Task<T?> GetFirstAsync(Expression<Func<T, bool>> whereExpression);
Task<TResult?> GetFirstAsync<TResult>(Expression<Func<T, bool>> whereExpression,Expression<Func<T, TResult>> resultExpression);
/// <summary>
/// get list
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
Task<List<T>> GetListAsync(Expression<Func<T, bool>> whereExpression);
Task<List<TResult>> GetListAsync<TResult>(Expression<Func<T, bool>> whereExpression,Expression<Func<T, TResult>> resultExpression);
/// <summary>
/// count
/// </summary>
/// <param name="exp"></param>
/// <returns></returns>
Task<int> CountAsync(Expression<Func<T, bool>> exp);
/// <summary>
/// exists
/// </summary>
/// <param name="exp"></param>
/// <returns></returns>
Task<bool> IsAnyAsync(Expression<Func<T, bool>> exp);
/// <summary>
/// update
/// </summary>
/// <param name="entity"></param>
/// <param name="ignoreColumns">要忽略更新的列</param>
/// <returns></returns>
Task<bool> UpdateAsync(T entity, Expression<Func<T, object>> ignoreColumns);
/// <summary>
/// update
/// </summary>
/// <param name="entity"></param>
/// <param name="updateColumns">要更新的列</param>
/// <returns></returns>
Task<bool> UpdateColumnAsync(T entity, Expression<Func<T, object>> updateColumns);
/// <summary>
/// update
/// </summary>
/// <param name="entity"></param>
/// <param name="ignoreAllNullColumns">不更新null值列</param>
/// <param name="ignoreAllDefaultValue">不更新默认值列</param>
/// <returns></returns>
Task<bool> UpdateAsync(T entity, bool ignoreAllNullColumns = false, bool ignoreAllDefaultValue = false);
/// <summary>
/// 批量更新
/// </summary>
/// <param name="entities"></param>
/// <param name="updateColumns">要更新的列</param>
/// <returns></returns>
Task<bool> UpdateRangeAsync(List<T> entities, Expression<Func<T, object>> updateColumns = null);
/// <summary>
/// 软删
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
Task<bool> SoftDeleteAsync(Expression<Func<T, bool>> where);
/// <summary>
/// insert
/// </summary>
/// <param name="insertObj"></param>
/// <returns></returns>
Task<bool> InsertAsync(T insertObj);
/// <summary>
/// 新增返回id
/// </summary>
/// <param name="insertObj"></param>
/// <returns></returns>
Task<int> InsertReturnIdentityAsync(T insertObj);
/// <summary>
/// 批量insert
/// </summary>
/// <param name="entities"></param>
/// <returns></returns>
Task<bool> InsertRangeAsync(List<T> entities);
}