EF6 - 使用多个DbSet编写存储库

时间:2014-12-28 03:29:12

标签: generics asp.net-mvc-5 entity-framework-6 repository-pattern dbset

我正在编写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存储库类吗?

提前致谢。

0 个答案:

没有答案