using Admin.Core.Common.Auth; using FreeSql; using System; using System.Linq.Expressions; using System.Threading.Tasks; namespace Admin.Core.Repository { public class RepositoryBase : BaseRepository, IRepositoryBase where TEntity : class, new() { public IUser User { get; set; } public RepositoryBase(IFreeSql freeSql) : base(freeSql, null, null) { } public RepositoryBase(IFreeSql fsql, Expression> filter, Func asTable = null) : base(fsql, filter, asTable) { } public virtual Task GetAsync(TKey id) { return Select.WhereDynamic(id).ToOneAsync(); } public virtual Task GetAsync(Expression> exp) { return Select.Where(exp).ToOneAsync(); } public virtual Task GetAsync(Expression> exp) { return Select.Where(exp).ToOneAsync(); } public virtual async Task SoftDeleteAsync(TKey id) { await UpdateDiy .SetDto(new { IsDeleted = true, ModifiedUserId = User.Id, ModifiedUserName = User.Name }) .WhereDynamic(id) .ExecuteAffrowsAsync(); return true; } public virtual async Task SoftDeleteAsync(TKey[] ids) { await UpdateDiy .SetDto(new { IsDeleted = true, ModifiedUserId = User.Id, ModifiedUserName = User.Name }) .WhereDynamic(ids) .ExecuteAffrowsAsync(); return true; } public virtual async Task SoftDeleteAsync(Expression> exp, params string[] disableGlobalFilterNames) { await UpdateDiy .SetDto(new { IsDeleted = true, ModifiedUserId = User.Id, ModifiedUserName = User.Name }) .Where(exp) .DisableGlobalFilter(disableGlobalFilterNames) .ExecuteAffrowsAsync(); return true; } public virtual async Task DeleteRecursiveAsync(Expression> exp, params string[] disableGlobalFilterNames) { await Select .Where(exp) .DisableGlobalFilter(disableGlobalFilterNames) .AsTreeCte() .ToDelete() .ExecuteAffrowsAsync(); return true; } public virtual async Task SoftDeleteRecursiveAsync(Expression> exp, params string[] disableGlobalFilterNames) { await Select .Where(exp) .DisableGlobalFilter(disableGlobalFilterNames) .AsTreeCte() .ToUpdate() .SetDto(new { IsDeleted = true, ModifiedUserId = User.Id, ModifiedUserName = User.Name }) .ExecuteAffrowsAsync(); return true; } } public class RepositoryBase : RepositoryBase, IRepositoryBase where TEntity : class, new() { public RepositoryBase(MyUnitOfWorkManager muowm) : base(muowm.Orm) { muowm.Binding(this); } } }