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();
}
}