我有一个 WebAPI 应用程序。我使用 Repository 模式,其中 GetAll 方法返回 IQueryable 集合来过滤数据库端的数据。正确吗?
这是界面:
public interface IBaseRepository<TEntity>
{
IQueryable<TEntity> GetAll();
Task<TEntity> CreateAsync(TEntity entity);
Task<TEntity> UpdateAsync(TEntity entity);
Task<TEntity> DeleteAsync(TEntity entity);
}
这是实现:
public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class
{
private readonly ApplicationDbContext _dbContext;
public BaseRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<TEntity> CreateAsync(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Entity is null");
await _dbContext.AddAsync(entity);
await _dbContext.SaveChangesAsync();
return entity;
}
public async Task<TEntity> DeleteAsync(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Entity is null");
_dbContext.Remove(entity);
await _dbContext.SaveChangesAsync();
return entity;
}
public IQueryable<TEntity> GetAll()
{
return _dbContext.Set<TEntity>();
}
public async Task<TEntity> UpdateAsync(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Entity is null");
_dbContext.Update(entity);
await _dbContext.SaveChangesAsync();
return entity;
}
}
这允许我进行数据库端过滤:
reports = await _reportRepository.GetAll()
.Where(x => x.UserId == userId)
.ToArrayAsync();
这种方法的正确性如何?我最近听说您需要从存储库返回 IEnumerable。
我想说这要看情况,因为大多数开发人员都在这个问题上争论。让我向您概述一下从存储库层公开 IQueryable 意味着什么。
另一方面