using System.Collections.Generic;
using System.Linq;
using System.Text;
using Migration.Target.Dao.Entities;
using Migration.Target.Dao.Repositories;
using Migration.Target.Dao.Filters;
namespace Migration.Target.Business
{
public abstract class Business<TEntity>
where TEntity : Entity
{
private Repository<TEntity> _repository;
protected Repository<TEntity> GetRepository()
{
if (this._repository == null)
this._repository = Activator.CreateInstance<Repository<TEntity>>();
return this._repository;
}
#region Miembros de IEntityService<TEntity>
public TEntity Get(long id)
{
Repository<TEntity> repository = this.GetRepository();
TEntity entity = repository.Get(id);
if (entity == null)
throw new Exception("No existe el registro");
return entity;
}
protected virtual IQueryable<TEntity> FilteringRules(IQueryable<TEntity> queryBase)
{
return queryBase;
}
public IList<TEntity> List()
{
Repository<TEntity> repository = this.GetRepository();
IQueryable<TEntity> queryBase = repository.GetQuery();
queryBase = this.FilteringRules(queryBase);
return queryBase.ToList();
}
public IList<TEntity> Find(Filter<TEntity> filter)
{
if (filter == null)
throw new ArgumentNullException("filter");
Repository<TEntity> repository = this.GetRepository();
IQueryable<TEntity> queryBase = repository.GetQuery();
//Prepara query con el filtro
queryBase = filter.BuildFilter(queryBase);
//Incluye reglas de filtrado
queryBase = this.FilteringRules(queryBase);
//Prepara ordenamiendo
queryBase = filter.Sort.BuildSortBy(queryBase);
//Prepara paginado
queryBase = filter.Pager.BuildPager(queryBase);
return queryBase.ToList();
}
public TEntity First(Filter<TEntity> filter)
{
if (filter == null)
throw new ArgumentNullException("filter");
Repository<TEntity> repository = this.GetRepository();
IQueryable<TEntity> queryBase = repository.GetQuery();
//Prepara query con el filtro
queryBase = filter.BuildFilter(queryBase);
//Incluye reglas de filtrado
queryBase = this.FilteringRules(queryBase);
//Prepara ordenamiendo
queryBase = filter.Sort.BuildSortBy(queryBase);
// TODO: Revisar
return queryBase.FirstOrDefault();
}
public TEntity Single(Filter<TEntity> filter)
{
if (filter == null)
throw new ArgumentNullException("filter");
Repository<TEntity> repository = this.GetRepository();
IQueryable<TEntity> queryBase = repository.GetQuery();
//Prepara query con el filtro
queryBase = filter.BuildFilter(queryBase);
//Incluye reglas de filtrado
queryBase = this.FilteringRules(queryBase);
// TODO: Revisar
return queryBase.SingleOrDefault();
}
public int Count(Filter<TEntity> filter)
{
if (filter == null)
throw new ArgumentNullException("filter");
Repository<TEntity> repository = this.GetRepository();
IQueryable<TEntity> queryBase = repository.GetQuery();
//Prepara query con el filtro
queryBase = filter.BuildFilter(queryBase);
//Incluye reglas de filtrado
queryBase = this.FilteringRules(queryBase);
// TODO: Revisar
return queryBase.Count();
}
public virtual TEntity Create(TEntity entity)
{
Repository<TEntity> repository = this.GetRepository();
TEntity entityReal = repository.Create(entity);
return entity;
}
public virtual TEntity Update(TEntity entity)
{
Repository<TEntity> repository = this.GetRepository();
TEntity entityReal = repository.Update(entity);
return entity;
}
public virtual TEntity Delete(TEntity entity)
{
Repository<TEntity> repository = this.GetRepository();
TEntity entityReal = repository.Delete(entity);
return entity;
}
#endregion
}
}
No hay comentarios:
Publicar un comentario