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