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); } }
/// <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; } }