Beispiel #1
0
        private async Task <Tout> ProtectedExecute <Tout>(Func <Task <Tout> > task)
        {
            try { return(await task()); }
            catch (DatabaseActionValidationException ex)
            {
                DataValidationException dataValidationException = new DataValidationException();

                PropertyInfo[] properties = ex.EntityType?.GetProperties();
                foreach (ValidationResult validationResult in ex.Errors)
                {
                    TypeMap modelToEntityMap = ModelEntityMapper.Mapper.ConfigurationProvider.GetAllTypeMaps().FirstOrDefault(
                        map => typeof(ModelBase).IsAssignableFrom(map.SourceType) && map.DestinationType.Equals(ex.EntityType)
                        );

                    if (validationResult.MemberNames.Count() == 0)
                    {
                        InvalidFieldInfo info = new InvalidFieldInfo(modelToEntityMap?.SourceType, null, validationResult.ErrorMessage);
                        dataValidationException.InvalidFieldInfos.Add(info);
                    }

                    foreach (string invalidFieldName in validationResult.MemberNames)
                    {
                        string realPropertyName = properties?.FirstOrDefault(
                            property => property.GetCustomAttribute <ColumnAttribute>()?.Name == invalidFieldName
                            )?.Name ?? invalidFieldName;

                        PropertyMap foundPropertyMap = modelToEntityMap?.PropertyMaps.FirstOrDefault(
                            map => map.DestinationMember.Name == realPropertyName
                            );

                        InvalidFieldInfo info = new InvalidFieldInfo(
                            modelToEntityMap?.SourceType,
                            foundPropertyMap.SourceMember.Name,
                            validationResult.ErrorMessage
                            );

                        dataValidationException.InvalidFieldInfos.Add(info);
                    }
                }

                throw dataValidationException;
            }
            catch (EntityNotFoundException ex)
            {
                throw new NotFoundException(ex.NotFoundSubject);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Strongly recommended when creating and updating
        /// </summary>
        protected TModel ProtectedExecute(Func <TEntity, TModel> executor, TEntity mappedEntity)
        {
            try { return(executor(mappedEntity)); }
            catch (DatabaseActionValidationException ex)
            {
                InvalidDataException <TModel> invalidDataException = new InvalidDataException <TModel>();
                foreach (ValidationResult validationResult in ex.Errors)
                {
                    string wrongField = validationResult.MemberNames.First();

                    IEnumerable <PropertyMap> propertyMaps = Mapper.ConfigurationProvider.FindTypeMapFor <TModel, TEntity>().PropertyMaps;
                    PropertyMap propertyMap = propertyMaps.First(pmap => pmap.DestinationMember.Name == wrongField);

                    string dtoWrongFieldName = propertyMap.SourceMember.Name;
                    string messageUpdated    = validationResult.ErrorMessage.Replace(wrongField, "'" + dtoWrongFieldName + "'");

                    InvalidFieldInfo <TModel> invalidFieldInfo = new InvalidFieldInfo <TModel>(dtoWrongFieldName, messageUpdated);
                    invalidDataException.InvalidFieldInfos.Add(invalidFieldInfo);
                }

                throw invalidDataException;
            }
        }