예제 #1
0
        // code generated from template "ServiceGetPaged.tt"

        /// <summary>
        /// Recupera una lista paginada de entidades Persona, según la especificación indicada.
        /// </summary>
        /// <param name="specificationDto">
        /// Especificación que se va a aplicar.
        /// </param>
        /// <returns>
        /// La lista paginada de entidades 'Persona', según la especificación indicada.
        /// </returns>
        public PagedElements <PersonaDto> GetPaged(SpecificationDto specificationDto)
        {
            #region Preconditions
            // Comprobar el DTO de entrada.
            Guard.ArgumentIsNotNull(
                specificationDto,
                string.Format(
                    FrameworkResource.EspecificationDataTransferObjectIsNull,
                    "Persona"));
            #endregion
            List <PersonaDto> result = new List <PersonaDto>(0);
            int totalElements        = 0;

            try
            {
                // Creamos el repositorio de la entidad.
                IPersonaRepository repo = ApplicationLayer.IocContainer.Resolve <IPersonaRepository>();

                // Obtenemos las entidades aplicando la especificación.
                ISpecification <Persona> filter =
                    specificationDto.ToSpecification <Persona>();

                PagedElements <Persona> entities =
                    repo.GetPagedElements(
                        specificationDto.PageIndex,
                        specificationDto.PageSize,
                        filter.IsSatisfiedBy(),
                        entity => entity.Id,
                        true);
                totalElements = entities.TotalElements;

                // Mapeamos los datos.
                entities.ToList()
                .ForEach(entity =>
                {
                    var entityDto = this.personaMapper.EntityMapping(entity);
                    result.Add(entityDto);
                });

                // Confirmamos la transacción.
                this.Commit();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            // Devolver el resultado.
            return(new PagedElements <PersonaDto>(result, totalElements));
        }