我正在编写MVC 5互联网应用程序,并希望获得有关使用存储库模式的一些建议。我目前有一个有15个DbSets的DbContext类,这个DbContext类在很多控制器中使用。我想使用存储库模式,以便我可以对我的代码进行单元测试。
我有一个通用存储库的接口,我有一个适用于一个DbSet的通用存储库。
这是我当前的通用存储库界面:
public interface IGenericRepository<TEntity>
{
Task<TEntity> GetByIdAsync(int id);
IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate);
IQueryable<TEntity> GetAll();
Task EditAsync(TEntity entity);
Task InsertAsync(TEntity entity);
Task DeleteAsync(TEntity entity);
}
这是存储库类:
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
protected DbSet<TEntity> DbSet;
private readonly DbContext _dbContext;
public GenericRepository(DbContext dbContext)
{
_dbContext = dbContext;
DbSet = _dbContext.Set<TEntity>();
}
public GenericRepository()
{
}
public IQueryable<TEntity> GetAll()
{
return DbSet;
}
public async Task<TEntity> GetByIdAsync(int id)
{
return await DbSet.FindAsync(id);
}
public IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate)
{
return DbSet.Where(predicate);
}
public async Task EditAsync(TEntity entity)
{
_dbContext.Entry(entity).State = EntityState.Modified;
await _dbContext.SaveChangesAsync();
}
public async Task InsertAsync(TEntity entity)
{
DbSet.Add(entity);
await _dbContext.SaveChangesAsync();
}
public async Task DeleteAsync(TEntity entity)
{
DbSet.Remove(entity);
await _dbContext.SaveChangesAsync();
}
我应该如何编写具有多个DbSet的存储库?我是否使用以下代码在正确的轨道上?
public class GenericMultipleRepository
{
public IGenericRepository<Address> addresses;
public IGenericRepository<Asset> assets;
private readonly DbContext dbContext;
public GenericMultipleRepository(DbContext dbContext)
{
this.dbContext = dbContext;
addresses = new GenericRepository<Address>();
assets = new GenericRepository<Asset>();
}
}
如果没有,我可以帮助编写一个可用于单元测试的多个DbSet存储库类吗?
提前致谢。