public static void SetAnnotation <TEntity>( this EdmModel model, IEdmTerm term, IEdmExpression expression, Expression <Func <TEntity, object> > propertyExpression = null) { if (model == null) { throw new ArgumentNullException(nameof(model)); } var type = model.GetEdmType(typeof(TEntity)) as EdmEntityType; IEdmVocabularyAnnotatable target = type; if (propertyExpression != null) { var property = type.Properties().Single(p => p.Name == propertyExpression.GetAccessedProperty().Name); target = property; } var label = new EdmLabeledExpression("Value", expression); //var coll1 = new EdmCollectionExpression(new EdmStringConstant("test1"), new EdmStringConstant("test2"), new EdmStringConstant("test3"), label); //var coll = new EdmCollectionExpression(expression, coll1); var annotation = new EdmVocabularyAnnotation(target, term, label); annotation.SetSerializationLocation(model, target.ToSerializationLocation()); model.AddVocabularyAnnotation(annotation); }
static ODataExtensionsEdmModelExtensions() { IEnumerable <EdmError> errors; using (var stream = typeof(ODataExtensionsEdmModelExtensions).GetTypeInfo().Assembly.GetManifestResourceStream("Microsoft.AspNetCore.OData.Extensions.Vocabularies.MeasuresVocabularies.xml")) { CsdlReader.TryParse(XmlReader.Create(stream), out Instance, out errors); } //ISOCurrencyTerm = Instance.FindDeclaredTerm(MeasuresISOCurrency); var validationNs = "Validation"; ValidationTerm = StringEdmTerm("Expression", validationNs); ValidationRegexTerm = StringEdmTerm("RegularExpression", validationNs); ValidationMaxLengthTerm = NumberEdmTerm("MaximumLength", validationNs); ValidationMinLengthTerm = NumberEdmTerm("MinimumLength", validationNs); ValidationRequiredTerm = BooleanEdmTerm("Required", validationNs); //ISOCurrencyTerm = Instance.FindDeclaredValueTerm(MeasuresISOCurrency); }
public static void SetValidationAnnotation <TEntity>( this EdmModel model, IEdmTerm term, IEdmExpression expression, string message, Expression <Func <TEntity, bool> > validationExpression = null, Expression <Func <TEntity, object> > propertyExpression = null) { if (model == null) { throw new ArgumentNullException(nameof(model)); } // TODO: If validation expression is null, then compile it from the IQL var type = model.GetEdmType(typeof(TEntity)) as EdmEntityType; IEdmVocabularyAnnotatable target = type; string propertyName = null; if (propertyExpression != null) { propertyName = propertyExpression.GetAccessedProperty().Name; var property = type.Properties().Single(p => p.Name == propertyName); target = property; } IqlQueryableAdapter.ExpressionConverter = () => new ExpressionToIqlConverter(); //var iql = ExpressionToIqlExpressionParser<TEntity>.Parse(validationExpression); //var parser = // new ActionParserInstance<ODataIqlData, ODataIqlExpressionAdapter>(new ODataIqlExpressionAdapter()); var expressionLabel = new EdmLabeledExpression("Expression", expression); var messageLabel = new EdmLabeledExpression("Message", new EdmStringConstant(message)); var coll = new EdmCollectionExpression(expressionLabel, messageLabel); var annotation = new EdmVocabularyAnnotation(target, term, coll); var validation = ValidationMap.ForModel(model); var validationObject = new EntityValidation <TEntity>(validationExpression, message); validation.EntityValidation <TEntity>() .AddValidation(validationObject, propertyName); annotation.SetSerializationLocation(model, target.ToSerializationLocation()); model.AddVocabularyAnnotation(annotation); }
static AnnotationManagerBase() { IEnumerable <EdmError> errors; var assembly = typeof(AnnotationManagerBase).GetTypeInfo().Assembly; var resourceNames = assembly.GetManifestResourceNames(); var resourceName = resourceNames.Single(rn => rn.EndsWith(".Vocabularies.MeasuresVocabularies.xml")); using (var stream = assembly.GetManifestResourceStream(resourceName)) { CsdlReader.TryParse(XmlReader.Create(stream), out Instance, out errors); } //ISOCurrencyTerm = Instance.FindDeclaredTerm(MeasuresISOCurrency); var configurationNs = "Iql"; var validationNs = $"{configurationNs}.ValidationRules"; DisplayTextFormatterTerm = StringEdmTerm("DisplayTextFormatter", configurationNs); IqlConfigurationTerm = StringEdmTerm("Configuration", configurationNs); ValidationTerm = StringEdmTerm("Expression", validationNs); ValidationRegexTerm = StringEdmTerm("RegularExpression", validationNs); ValidationMaxLengthTerm = NumberEdmTerm("MaximumLength", validationNs); ValidationMinLengthTerm = NumberEdmTerm("MinimumLength", validationNs); ValidationRequiredTerm = BooleanEdmTerm("Required", validationNs); //ISOCurrencyTerm = Instance.FindDeclaredValueTerm(MeasuresISOCurrency); }