internal override void WritIncludeElementHeader(IEdmInclude include) { // e.g. <edmx:Include Namespace="NS.Ref1" Alias="VPCT" /> this.xmlWriter.WriteStartElement(CsdlConstants.Prefix_Edmx, CsdlConstants.Element_Include, this.edmxNamespace); this.WriteRequiredAttribute(CsdlConstants.Attribute_Namespace, include.Namespace, EdmValueWriter.StringAsXml); this.WriteRequiredAttribute(CsdlConstants.Attribute_Alias, include.Alias, EdmValueWriter.StringAsXml); }
public void ParseIncludeWorksAsExpected() { string json = @" { ""$Namespace"": ""org.example.display"", ""$Alias"": ""UI"" }"; using (JsonDocument document = JsonDocument.Parse(json)) { JsonElement rootElement = document.RootElement; JsonParserContext context = new JsonParserContext(); IEdmInclude include = CsdlJsonParser.ParseInclude(rootElement, context); Assert.NotNull(include); Assert.Equal("UI", include.Alias); Assert.Equal("org.example.display", include.Namespace); } }
public void ParseIncludeReportUnExpectedMember() { string json = @" { ""$Namespace"": ""org.example.display"", ""$Unknown"": ""UI"" }"; using (JsonDocument document = JsonDocument.Parse(json)) { JsonElement rootElement = document.RootElement; JsonParserContext context = new JsonParserContext(); IEdmInclude include = CsdlJsonParser.ParseInclude(rootElement, context); Assert.NotNull(include); Assert.Equal("org.example.display", include.Namespace); var error = Assert.Single(context.Errors); Assert.Equal(EdmErrorCode.UnexpectedElement, error.ErrorCode); Assert.Equal("$.$Unknown", error.ErrorLocation.ToString()); Assert.Equal("A member '$.$Unknown' with value type 'String' is unexpected.", error.ErrorMessage); } }
/// <summary> /// Constructor for creating a referenced model, is private and only called by the above constructor. /// </summary> /// <param name="referencedCsdlModel">The referenced raw CsdlModel.</param> /// <param name="annotationsManager">The IEdmDirectValueAnnotationsManager.</param> /// <param name="mainCsdlSemanticsModel">The CsdlSemanticsModel that will reference this new CsdlSemanticsModel. </param> private CsdlSemanticsModel(CsdlModel referencedCsdlModel, IEdmDirectValueAnnotationsManager annotationsManager, CsdlSemanticsModel mainCsdlSemanticsModel) : base(Enumerable.Empty <IEdmModel>(), annotationsManager) { this.mainEdmModel = mainCsdlSemanticsModel; Debug.Assert(referencedCsdlModel.ParentModelReferences.Any(), "referencedCsdlModel.ParentModelReferences.Any()"); this.astModel = referencedCsdlModel; this.SetEdmReferences(referencedCsdlModel.CurrentModelReferences); foreach (var tmp in referencedCsdlModel.ParentModelReferences.SelectMany(s => s.Includes)) { string includeNs = tmp.Namespace; if (!referencedCsdlModel.Schemata.Any(s => s.Namespace == includeNs)) { // edmx:include must be an existing namespace // TODO: REF throw exception: should include a namespace that exists in referenced model. } } foreach (var tmp in referencedCsdlModel.CurrentModelReferences.SelectMany(s => s.Includes)) { // in any referenced model, alias may point to a further referenced model, now make alias available: this.SetNamespaceAlias(tmp.Namespace, tmp.Alias); } foreach (var schema in referencedCsdlModel.Schemata) { string schemaNamespace = schema.Namespace; IEdmInclude edmInclude = referencedCsdlModel.ParentModelReferences.SelectMany(s => s.Includes).FirstOrDefault(s => s.Namespace == schemaNamespace); if (edmInclude != null) { this.AddSchema(schema, false /*addAnnotations*/); } // TODO: REF add annotations } }
internal override void WriteIncludeElementEnd(IEdmInclude include) { this.xmlWriter.WriteEndElement(); }
internal abstract void WriteIncludeElementEnd(IEdmInclude include);
internal abstract void WritIncludeElementHeader(IEdmInclude include);
/// <summary> /// Add include information. /// </summary> /// <param name="edmInclude">The IEdmInclude.</param> public void AddInclude(IEdmInclude edmInclude) { this.includes.Add(edmInclude); }