第四章:仓储模式与工作单元
博客v1.0系列教程(Csharp)博客 v1.0 系列教程 (C#)
4.1 泛型仓储接口
public interface IRepository<T> where T : class, new()
{
Task<T?> GetByIdAsync(long id);
Task<List<T>> GetListAsync();
Task<bool> InsertAsync(T entity);
Task<bool> UpdateAsync(T entity);
Task<bool> DeleteAsync(long id);
ISugarQueryable<T> AsQueryable();
}
4.2 泛型仓储实现
public class Repository<T> : IRepository<T> where T : class, new()
{
private readonly ISqlSugarClient _db;
public Repository(ISqlSugarClient db)
{
_db = db;
}
public async Task<T?> GetByIdAsync(long id)
{
return await _db.Queryable<T>().InAsync(id);
}
public async Task<List<T>> GetListAsync()
{
return await _db.Queryable<T>().ToListAsync();
}
public async Task<bool> InsertAsync(T entity)
{
return await _db.Insertable(entity).ExecuteCommandAsync() > 0;
}
public async Task<bool> UpdateAsync(T entity)
{
return await _db.Updateable(entity).ExecuteCommandAsync() > 0;
}
public async Task<bool> DeleteAsync(long id)
{
return await _db.Deleteable<T>().InAsync(id) > 0;
}
public ISugarQueryable<T> AsQueryable()
{
return _db.Queryable<T>();
}
}
4.3 工作单元
public class UnitOfWork : IUnitOfWork
{
private readonly ISqlSugarClient _db;
public UnitOfWork(ISqlSugarClient db)
{
_db = db;
}
public async Task BeginTransactionAsync()
{
_db.Ado.BeginTran();
}
public async Task CommitTransactionAsync()
{
_db.Ado.CommitTran();
}
public async Task RollbackTransactionAsync()
{
_db.Ado.RollbackTran();
}
}
4.4 使用示例
public class ArticleService
{
private readonly IRepository<ArticleModel> _articleRepo;
private readonly IUnitOfWork _unitOfWork;
public async Task<bool> CreateArticleAsync(ArticleDto dto)
{
try
{
await _unitOfWork.BeginTransactionAsync();
var article = new ArticleModel
{
Title = dto.Title,
Content = dto.Content,
CreateTime = DateTime.UtcNow
};
var result = await _articleRepo.InsertAsync(article);
await _unitOfWork.CommitTransactionAsync();
return result;
}
catch
{
await _unitOfWork.RollbackTransactionAsync();
throw;
}
}
}
下一章将实现 JWT 认证与用户系统。
csharprepositoryunit-of-worksqlsugar