private ModelMetadata GetTypeMetadata(Type type) { if (_entityMetadataProvider.IsEntityType(type)) { return(_entityMetadataProvider.GetMetadata(type)); } if (_clientModelMetadataProvider.IsClientModel(type)) { return(_clientModelMetadataProvider.GetMetadata(type)); } return(null); }
/// <summary> /// Builds <see cref="BreezeMetadata"/>. /// </summary> /// <returns>The breeze metadata.</returns> public BreezeMetadata Build() { var metadata = new BreezeMetadata { StructuralTypes = new List <StructuralType>(), ResourceEntityTypeMap = new Dictionary <string, string>(), EnumTypes = new List <EnumType>(), LocalQueryComparisonOptions = _localQueryComparisonOptions ?? "caseInsensitiveSQL" }; _addedTypes.Clear(); _entityMetadata = _classMetadataProvider.GetAll() .Select(o => o.MappedClass) .Where(o => o != null) .Where(o => _includePredicate?.Invoke(o) ?? true) .Distinct() .Select(o => new { MappedClass = o, Metadata = _entityMetadataProvider.GetMetadata(o) }) .ToDictionary(o => o.MappedClass, o => o.Metadata); foreach (var entityMetadata in _entityMetadata.Values) { AddEntityType(entityMetadata, metadata); } if (_clientModelAssemblies == null) { return(metadata); } // Add client models _clientModelMetadata = _clientModelAssemblies?.SelectMany(assembly => assembly.GetTypes() .Where(t => t.IsClass && !t.IsAbstract && _clientModelMetadataProvider.IsClientModel(t))) .Where(t => _includePredicate?.Invoke(t) ?? true) .Select(o => _clientModelMetadataProvider.GetMetadata(o)) .ToDictionary(o => o.Type, o => o); foreach (var modelMetadata in _clientModelMetadata.Values) { AddClientModelType(modelMetadata, metadata); } return(metadata); }
public override IEnumerable <Validator> GetValidators(DataProperty dataProperty, Type type) { Validator validator; var addedValidators = new HashSet <string>(); if (!dataProperty.IsNullable) { ModelMetadata modelMetadata = null; if (_entityMetadataProvider.IsEntityType(type)) { modelMetadata = _entityMetadataProvider.GetMetadata(type); } else if (_clientModelMetadataProvider.IsClientModel(type)) { modelMetadata = _clientModelMetadataProvider.GetMetadata(type); } // Do not permit default values for foreign key properties if (modelMetadata?.ForeignKeyPropertyNames.Contains(dataProperty.NameOnServer) == true || dataProperty.DataType == DataType.String) { addedValidators.Add("fvNotEmpty"); validator = new Validator("fvNotEmpty"); validator.MergeLeft(FluentValidators.GetParameters(new NotEmptyValidator(null))); yield return(validator); } else { addedValidators.Add("fvNotNull"); validator = new Validator("fvNotNull"); validator.MergeLeft(FluentValidators.GetParameters(new NotNullValidator())); yield return(validator); } } if (dataProperty.MaxLength.HasValue) { addedValidators.Add("fvLength"); validator = new Validator("fvLength"); validator.MergeLeft(FluentValidators.GetParameters(new LengthValidator(0, dataProperty.MaxLength.Value))); yield return(validator); } if (dataProperty.DataType.HasValue && TryGetDataTypeValidator(dataProperty.DataType.Value, out validator)) { yield return(validator); } if (!_typePropertyValidators.TryGetValue(type, out var propertyValidators)) { if (!(_validatorFactory.GetValidator(type) is IEnumerable <IValidationRule> validationRules)) { yield break; } propertyValidators = validationRules.OfType <PropertyRule>().Where(IsRuleSupported).ToLookup(o => o.PropertyName); _typePropertyValidators.Add(type, propertyValidators); } // Add fluent validations foreach (var propertyRule in propertyValidators[dataProperty.NameOnServer]) { var currentValidator = propertyRule.CurrentValidator; var name = FluentValidators.GetName(currentValidator); if (string.IsNullOrEmpty(name) || addedValidators.Contains(name)) { continue; } validator = new Validator(name); validator.MergeLeft(FluentValidators.GetParameters(currentValidator)); yield return(validator); } }