namespace Repository; /// /// 仓储基础接口 /// /// 实体类型 public interface IBaseRepository where T : BaseEntity { /// /// 获取所有数据 /// Task> GetAllAsync(); /// /// 根据ID获取单条数据 /// Task GetByIdAsync(long id); /// /// 添加数据 /// Task AddAsync(T entity); /// /// 添加数据 /// Task AddRangeAsync(IEnumerable entities); /// /// 更新数据 /// Task UpdateAsync(T entity); /// /// 批量更新数据 /// Task UpdateRangeAsync(IEnumerable entities); /// /// 删除数据 /// Task DeleteAsync(long id); } /// /// 仓储基类实现 - 基于 FreeSql /// /// 实体类型 public abstract class BaseRepository(IFreeSql freeSql) : IBaseRepository where T : BaseEntity { protected readonly IFreeSql FreeSql = freeSql ?? throw new ArgumentNullException(nameof(freeSql)); public virtual async Task> GetAllAsync() { try { return await FreeSql.Select().ToListAsync(); } catch { return []; } } public virtual async Task GetByIdAsync(long id) { try { // FreeSql 会根据配置自动识别主键 return await FreeSql.Select().Where(x => x.Id == id).FirstAsync(); } catch { return null; } } public virtual async Task AddAsync(T entity) { try { var result = await FreeSql.Insert(entity).ExecuteAffrowsAsync(); return result == 1; } catch { return false; } } public async Task AddRangeAsync(IEnumerable entities) { var result = await FreeSql.Insert(entities).ExecuteAffrowsAsync(); return result == entities.Count(); } public virtual async Task UpdateAsync(T entity) { try { var affrows = await FreeSql.Update() .SetSource(entity) .ExecuteAffrowsAsync(); return affrows > 0; } catch (Exception ex) { Console.WriteLine($"Update failed: {ex.Message}"); return false; } } public virtual async Task UpdateRangeAsync(IEnumerable entities) { try { var affrows = await FreeSql.Update() .SetSource(entities) .ExecuteAffrowsAsync(); return affrows == entities.Count(); } catch (Exception ex) { Console.WriteLine($"UpdateRange failed: {ex.Message}"); return false; } } public virtual async Task DeleteAsync(long id) { try { var affrows = await FreeSql.Delete().Where(x => x.Id == id).ExecuteAffrowsAsync(); return affrows > 0; } catch { return false; } } }