Thursday, 17 October 2019

Entity Framework Unity/ repository pattern

public interface IUnitOfWork
    {
        DbContext DbContext { get; }
        int Save();
    }

public class UnitOfWork : IUnitOfWork
    {
        public UnitOfWork(DbContext dbContext)
        {
            DbContext = dbContext;
        }

        public DbContext DbContext { get; }

        public int Save()
        {
            return DbContext.SaveChanges();
        }
    }


public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
    private readonly DbContext _dbContext;

public GenericRepository(IUnitOfWork unitOfWork)
{
_dbContext = unitOfWork.DbContext;
}

public IQueryable<TEntity> GetAll()
{
IQueryable<TEntity> query = _dbContext.Set<TEntity>();
return query;
}

public IQueryable<TEntity> FindBy(Expression<Func<TEntity, bool>> predicate)
{
IQueryable<TEntity> query = _dbContext.Set<TEntity>().Where(predicate);
return query;
}

public TEntity Add(TEntity entity)
{
return _dbContext.Set<TEntity>().Add(entity);
}

public void Delete(TEntity entity)
{
_dbContext.Set<TEntity>().Remove(entity);
}

public void Update(TEntity entity)
{
_dbContext.Entry(entity).State = EntityState.Modified;
}

public void Save()
{
_dbContext.SaveChanges();
}

        public IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
        {
            return _dbContext.Set<TEntity>().AddRange(entities);
        }
    }



public class TdxRepositoryService : ITdxRepositoryService
    {
        /// <summary>
        /// The generic repository for <see cref="TdxRepository"/>
        /// </summary>
        private readonly IGenericRepository<TdxRepository> _tdxGenericRepository;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="tdxGenericRepository">The generic repository for <see cref="TdxRepository"/></param>
        public TdxRepositoryService(IGenericRepository<TdxRepository> tdxGenericRepository)
        {
            _tdxGenericRepository = tdxGenericRepository;
        }

        /// <inheritdoc />
        public IEnumerable<TdxRepository> GetRepositories(bool includeInactive)
        {
            var tdxRepositories = includeInactive
                ? _tdxGenericRepository.GetAll()
                : _tdxGenericRepository.GetAll().Where(x => x.Active);
           
            return tdxRepositories
                .ToList();
        }

        /// <inheritdoc />
        public TdxRepository GeTdxRepositoryById(int repositoryId)
        {
            return _tdxGenericRepository
                .FindBy(x => x.Id == repositoryId)
                .FirstOrDefault();
        }

///<inheritdoc/>
public TdxRepository GeTdxRepositoryByName(string repositoryName)
{
return _tdxGenericRepository
.FindBy(x => x.Name.LOWER() == repositoryName.ToLower())
.FirstOrDefault();
}
}

No comments:

Post a Comment