using SqlSugar; using Microsoft.Extensions.Logging; using KH.WMS.Core.DependencyInjection.ServiceLifetimes; namespace KH.WMS.Core.Database.Repositories; /// /// 仓储基类实现 /// /// 实体类型 public class RepositoryBase : IRepository where T : class, new() where TKey : struct { protected readonly ISqlSugarClient _db; protected readonly ILogger? _logger; public RepositoryBase(ISqlSugarClient db, ILogger? logger = null) { _db = db; _logger = logger; } public async Task GetByIdAsync(TKey id) { return await _db.Queryable().In(id).FirstAsync(); } public async Task> GetAllAsync() { return await _db.Queryable().ToListAsync(); } public async Task> GetListAsync(System.Linq.Expressions.Expression> expression) { return await _db.Queryable().Where(expression).ToListAsync(); } public async Task GetFirstOrDefaultAsync(System.Linq.Expressions.Expression> expression) { return await _db.Queryable().FirstAsync(expression); } public async Task<(List Items, int Total)> GetPagedListAsync(int pageIndex, int pageSize, System.Linq.Expressions.Expression>? expression = null) { var query = _db.Queryable(); if (expression != null) { query = query.Where(expression); } var total = await query.CountAsync(); var items = await query.ToPageListAsync(pageIndex, pageSize); return (items, total); } public async Task InsertAsync(T entity) { return (await _db.Insertable(entity).ExecuteReturnPkListAsync()).First(); } public async Task> InsertAsync(List entities) { return await _db.Insertable(entities).ExecuteReturnPkListAsync(); } public async Task InsertReturnEntityAsync(T entity) { return await _db.Insertable(entity).ExecuteReturnEntityAsync(); } public async Task> InsertReturnEntityAsync(List entities) { List keys = await _db.Insertable(entities).ExecuteReturnPkListAsync(); return await _db.Queryable().In(keys).ToListAsync(); } public async Task UpdateAsync(T entity) { return await _db.Updateable(entity).ExecuteCommandAsync() > 0; } public async Task UpdateAsync(List entities) { return await _db.Updateable(entities).ExecuteCommandAsync() > 0; } public async Task DeleteAsync(TKey id) { return await _db.Deleteable().In(id).ExecuteCommandAsync() > 0; } public async Task DeleteAsync(List ids) { return await _db.Deleteable().In(ids).ExecuteCommandAsync() > 0; } public async Task DeleteAsync(System.Linq.Expressions.Expression> expression) { return await _db.Deleteable().Where(expression).ExecuteCommandAsync() > 0; } public async Task ExistsAsync(System.Linq.Expressions.Expression> expression) { return await _db.Queryable().Where(expression).AnyAsync(); } public async Task CountAsync(System.Linq.Expressions.Expression>? expression = null) { var query = _db.Queryable(); if (expression != null) { query = query.Where(expression); } return await query.CountAsync(); } }