using System.Linq.Expressions; using SJZY.Track.Domain; using SJZY.Track.Domain.SeedWork; using SJZY.Track.Infrastructure.Queries; using Volo.Abp; namespace SJZY.Track.Infrastructure.Repositories; /// /// 仓储基类实现 /// /// public class BasicRepository : BasicQuery, IBasicRepository where T : class, IAggregateRoot, new() { public async Task UpdateAsync(T entity, Expression>? ignoreColumns) { return await Context.Updateable(entity) .IgnoreColumnsIF(ignoreColumns != null, ignoreColumns) .ExecuteCommandHasChangeAsync(); } public async Task UpdateColumnAsync(T entity, Expression>? updateColumns) { return await Context.Updateable(entity) .UpdateColumnsIF(updateColumns != null, updateColumns) .ExecuteCommandHasChangeAsync(); } public async Task UpdateAsync(T entity, bool ignoreAllNullColumns = false, bool ignoreAllDefaultValue = false) { return await Context.Updateable(entity) .IgnoreColumns(ignoreAllNullColumns: ignoreAllNullColumns, ignoreAllDefaultValue: ignoreAllDefaultValue) .ExecuteCommandHasChangeAsync(); } public async Task UpdateRangeAsync(List entities, Expression>? columns = null) { return await Context.Updateable(entities) .UpdateColumnsIF(columns != null, columns) .ExecuteCommandHasChangeAsync(); } // tips: required where public async Task SoftDeleteAsync(Expression> where) { if (!typeof(T).IsAssignableTo()) throw new BusinessException( message: $"实体没有实现{nameof(ISoftDeleteBasicEntity)}不能调用{nameof(SoftDeleteAsync)}"); return await Context.Updateable() .Where(where) .SetColumns(nameof(ISoftDeleteBasicEntity.IsDeleted), 1) .ExecuteCommandHasChangeAsync(); } }