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);
 }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        /// <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);
Example #8
0
 /// <summary>
 /// Add include information.
 /// </summary>
 /// <param name="edmInclude">The IEdmInclude.</param>
 public void AddInclude(IEdmInclude edmInclude)
 {
     this.includes.Add(edmInclude);
 }
 /// <summary>
 /// Add include information.
 /// </summary>
 /// <param name="edmInclude">The IEdmInclude.</param>
 public void AddInclude(IEdmInclude edmInclude)
 {
     this.includes.Add(edmInclude);
 }