示例#1
0
        public static async Task <bool> ServiceUpdateEntityCheckHelper <TEntity, TDto, TIdPropertyType>(TEntity updatedEntity,
                                                                                                        BaseResult <TDto> response, object id, string propertyName, IUnityOfWork_EF uow) where TEntity : AuditableEntityBase
        {
            // Detectar inconsistencia entre el Id y la entidad (deben ser iguales en valores)
            if (!((TIdPropertyType)id).Equals((TIdPropertyType)AppHelpers.GetPropertyValue(updatedEntity, propertyName)))
            {
                throw new Exception(AppMessages.UPDATE_ID_ERROR);
            }

            // Obtener la entidad desde la BD para comparar con la recibida
            var entityFromDb = await uow.GetRepository <TEntity>().GetById(id);

            // Si la entidad ya está eliminada o no existe, no hacer nada y devolver null
            if (entityFromDb == null || entityFromDb.IsDeleted)
            {
                response.Data = default(TDto);
                return(false);
            }

            // Comparar con la entidad de la BD y detectar un cambio no permitido
            if (AppHelpers.NotAllowedChanges(entityFromDb, updatedEntity))
            {
                throw new Exception(AppMessages.UPDATE_FORBIDDEN_FIELDS);
            }

            // Actualizar propiedades de la entidad
            AppHelpers.SetFieldsForEntityUpdate(updatedEntity);

            return(true);
        }
示例#2
0
        public static async Task <BaseResult <TDto> > ServiceCreateEntityHelper <TEntity, TDto, TIdPropertyType>(
            TEntity newEntity, string propertyName, IUnityOfWork_EF uow,
            string GetById_Command) where TEntity : AuditableEntityBase
        {
            var response = new BaseResult <TDto>();

            // Actualizar propiedades de la entidad
            AppHelpers.SetFieldsForEntityUpdate(newEntity);

            // Guardar la nueva entidad
            await uow.GetRepository <TEntity>().Add(newEntity);

            await uow.SaveAsync();

            // Devolver la entidad recien guardada desde la BD
            response.Data = await uow.GetConnection.QuerySingleOrDefaultAsync <TDto>(GetById_Command,
                                                                                     new { id1 = AppHelpers.GetPropertyValue(newEntity, propertyName) });

            return(response);
        }
示例#3
0
        public static async Task <BaseResult <TDto> > ServiceUpdateEntityHelper <TEntity, TDto, TIdPropertyType>(
            TEntity updatedEntity, TIdPropertyType id, string propertyName, IUnityOfWork_EF uow,
            string GetById_Command) where TEntity : AuditableEntityBase
        {
            var response = new BaseResult <TDto>();

            // Detectar inconsistencia entre el Id y la entidad (deben ser iguales en valores)
            if (!((TIdPropertyType)id).Equals((TIdPropertyType)AppHelpers.GetPropertyValue(updatedEntity, propertyName)))
            {
                throw new Exception(AppMessages.UPDATE_ID_ERROR);
            }

            // Obtener la entidad desde la BD para comparar con la recibida
            var entityFromDb = await uow.GetRepository <TEntity>().GetById(id);

            // Si la entidad ya está eliminada o no existe, no hacer nada y devolver null
            if (entityFromDb == null || entityFromDb.IsDeleted)
            {
                response.Data = default(TDto);
                return(response);
            }

            // Comparar con la entidad de la BD y detectar un cambio no permitido
            if (AppHelpers.NotAllowedChanges(entityFromDb, updatedEntity))
            {
                throw new Exception(AppMessages.UPDATE_FORBIDDEN_FIELDS);
            }

            // Actualizar propiedades de la entidad
            AppHelpers.SetFieldsForEntityUpdate(updatedEntity);

            // Guardar la entidad actualizada
            await uow.GetRepository <TEntity>().Update(updatedEntity);

            await uow.SaveAsync();

            // Devolver la entidad recien guardada desde la BD
            response.Data = await uow.GetConnection.QuerySingleOrDefaultAsync <TDto>(GetById_Command, new { id1 = id });

            return(response);
        }