Esempio n. 1
0
        public static IEdmModel GetModel(this ConnectionProperties properties)
        {
            var uri = properties.Uri;

            uri += uri.EndsWith("/") ? "$metadata" : "/$metadata";

            IEdmModel model;

            var settings = new XmlReaderSettings
            {
                XmlResolver = new XmlUrlResolver
                {
                    Credentials = properties.GetCredentials(),
                    Proxy       = properties.GetWebProxy()
                },
                DtdProcessing = DtdProcessing.Parse
            };

            using (var reader = XmlReader.Create(uri, settings))
            {
                model = EdmxReader.Parse(reader);
            }

            return(model);
        }
Esempio n. 2
0
        private IEdmModel LoadModel()
        {
            var       xmlTextReader = new XmlTextReader(GetMetadataUri().ToString());
            IEdmModel model         = EdmxReader.Parse(xmlTextReader);

            return(model);
        }
Esempio n. 3
0
        /// <summary>
        /// This methods reads the metadata from the input and returns an <see cref="IEdmModel"/>
        /// representing the read metadata information.
        /// </summary>
        /// <returns>An <see cref="IEdmModel"/> instance representing the read metadata.</returns>
        private IEdmModel ReadMetadataDocumentImplementation()
        {
            IEdmModel model;
            IEnumerable <EdmError> errors;

            if (!EdmxReader.TryParse(this.xmlReader, out model, out errors))
            {
                Debug.Assert(errors != null, "errors != null");

                StringBuilder builder = new StringBuilder();
                foreach (EdmError error in errors)
                {
                    builder.AppendLine(error.ToString());
                }

                throw new ODataException(Strings.ODataMetadataInputContext_ErrorReadingMetadata(builder.ToString()));
            }

            Debug.Assert(model != null, "model != null");

            // Load all the OData annotations, i.e., translate them from their serializable form into the more usable in-memory form.
            model.LoadODataAnnotations(this.MessageReaderSettings.MessageQuotas.MaxEntityPropertyMappingsPerType);

            return(model);
        }
        public void AllElementsInExtendedContainerTest()
        {
            string             mainModelxml        = @"<?xml version=""1.0"" encoding=""utf-16""?>
<edmx:Edmx Version=""4.0"" xmlns:edmx=""http://docs.oasis-open.org/odata/ns/edmx"">
  <edmx:Reference Uri=""http://host/schema/Location.xml"">
    <edmx:Include Namespace=""Namespace1"" Alias=""A1"" />
  </edmx:Reference>
  <edmx:DataServices>
    <Schema Namespace=""Namespace0"" xmlns=""http://docs.oasis-open.org/odata/ns/edm"">  
        <EntityContainer Name=""DefaultContainer0"" Extends=""Namespace1.Container_sub"">
        </EntityContainer>  
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>";
            EdmModel           model1              = new EdmModel();
            EdmEntityType      entityType1         = new EdmEntityType("Namespace1", "EntityType");
            EdmEntityContainer edmEntityContainer1 = new EdmEntityContainer("Namespace1", "Container_sub");

            edmEntityContainer1.AddEntitySet("EntitySet1", entityType1);
            model1.AddElement(edmEntityContainer1);

            IEdmModel mainModel;
            IEnumerable <EdmError> errors;
            bool parsed = EdmxReader.TryParse(XmlReader.Create(new StringReader(mainModelxml)), new IEdmModel[] { model1 }, out mainModel, out errors);

            Assert.IsTrue(parsed);

            var container = mainModel.EntityContainer;

            Assert.AreEqual(1, container.AllElements().Count());
        }
        public void FindEntitySetInExtendedContainer_1stTest()
        {
            string             mainModelxml        = @"<?xml version=""1.0"" encoding=""utf-16""?>
<edmx:Edmx Version=""4.0"" xmlns:edmx=""http://docs.oasis-open.org/odata/ns/edmx"">
  <edmx:Reference Uri=""http://host/schema/Location.xml"">
    <edmx:Include Namespace=""Namespace1"" Alias=""A1"" />
  </edmx:Reference>
  <edmx:DataServices>
    <Schema Namespace=""Namespace0"" xmlns=""http://docs.oasis-open.org/odata/ns/edm"">  
        <EntityContainer Name=""DefaultContainer0"" Extends=""Namespace1.Container_sub"">
        </EntityContainer>  
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>";
            EdmModel           model1              = new EdmModel();
            EdmEntityType      entityType1         = new EdmEntityType("Namespace1", "EntityType");
            EdmEntityContainer edmEntityContainer1 = new EdmEntityContainer("Namespace1", "Container_sub");

            edmEntityContainer1.AddEntitySet("EntitySet1", entityType1);
            model1.AddElement(edmEntityContainer1);

            IEdmModel mainModel;
            IEnumerable <EdmError> errors;
            bool parsed = EdmxReader.TryParse(XmlReader.Create(new StringReader(mainModelxml)), new IEdmModel[] { model1 }, out mainModel, out errors);

            Assert.IsTrue(parsed);

            IEdmEntitySet entitySet1 = mainModel.FindDeclaredEntitySet("EntitySet1");
            IEdmEntitySet entitySet1FromContainer = mainModel.EntityContainer.FindEntitySetExtended("EntitySet1");

            Assert.AreEqual(entitySet1, entitySet1FromContainer, "Should find the same entityset.");
            Assert.IsNotNull(entitySet1, "Should find across model and get not-null entity set.");
            Assert.AreEqual("Namespace1.Container_sub", entitySet1.Container.FullName(), "name should be correct.");
        }
Esempio n. 6
0
        internal static object GetAnnotation(this IODataServiceContext context, params object[] customs)
        {
            if (false == (null != customs && customs.Count() <= 3))
            {
                return(null);
            }

            var serviceUri = customs[0] as Uri;
            var requestUri = customs[1] as Uri;
            var metadata   = customs[2] as IODataServiceMetadata;

            IEdmModel     edmModel     = EdmxReader.Parse(XmlReader.Create(serviceUri + "/$metadata"));
            IEdmEntitySet edmEntitySet = edmModel.EntityContainers()
                                         .First()
                                         .EntitySets()
                                         .FirstOrDefault(es =>
                                                         es.Name.ToLower() == requestUri.Segments.Last().ToLower() ||
                                                         requestUri.Segments.Last().ToLower().StartsWith(es.Name.ToLower() + "(")
                                                         );
            IEdmEntityType edmEntityType  = edmEntitySet.ElementType;
            ODataUriParser internalParser = new ODataUriParser(edmModel, serviceUri);

            var odataParser = new ODataParser()
            {
                EdmModel       = edmModel,
                EdmEntitySet   = edmEntitySet,
                EdmEntityType  = edmEntityType,
                InternalParser = internalParser,
                Metadata       = metadata,
            };

            return(odataParser);
        }
Esempio n. 7
0
        public void ProvideOverloadToSupplyEntitySetConfiguration()
        {
            IEdmModel model  = null;
            Stream    stream = Client.GetStreamAsync(BaseAddress + "/odata/$metadata").Result;

            using (XmlReader reader = XmlReader.Create(stream))
            {
                model = EdmxReader.Parse(reader);
            }
            IEdmFunctionImport collection         = model.FindDeclaredEntityContainer("Container").FindFunctionImports("GetProductsByCategory").SingleOrDefault();
            IEdmEntityType     expectedReturnType = model.FindDeclaredType(typeof(ActionProduct).FullName) as IEdmEntityType;

            Assert.NotNull(expectedReturnType);
            Assert.NotNull(collection);
            Assert.True(collection.IsBindable);
            Assert.NotNull(collection.ReturnType.AsCollection());
            Assert.NotNull(collection.ReturnType.AsCollection().ElementType().AsEntity());
            Assert.Equal(expectedReturnType, collection.ReturnType.AsCollection().ElementType().AsEntity().EntityDefinition());

            IEdmFunctionImport single = model.FindDeclaredEntityContainer("Container").FindFunctionImports("GetSpecialProduct").SingleOrDefault();

            Assert.NotNull(single);
            Assert.True(single.IsBindable);
            Assert.NotNull(single.ReturnType.AsEntity());
            Assert.Equal(expectedReturnType, single.ReturnType.AsEntity().EntityDefinition());
        }
Esempio n. 8
0
            public OdcmModel GenerateOdcmModel(IReadOnlyDictionary <string, string> serviceMetadata)
            {
                if (serviceMetadata == null)
                {
                    throw new ArgumentNullException("serviceMetadata");
                }

                if (!serviceMetadata.ContainsKey(MetadataKey))
                {
                    throw new ArgumentException("Argument must contain value for key \"$metadata\"", "serviceMetadata");
                }

                var edmx = XElement.Parse(serviceMetadata[MetadataKey]);

                IEnumerable <EdmError> errors;

                if (!EdmxReader.TryParse(edmx.CreateReader(ReaderOptions.None), out _edmModel, out errors))
                {
                    Debug.Assert(errors != null, "errors != null");

                    if (errors.FirstOrDefault() == null)
                    {
                        throw new InvalidOperationException();
                    }

                    throw new InvalidOperationException(errors.FirstOrDefault().ErrorMessage);
                }

                _odcmModel = new OdcmModel(serviceMetadata);

                WriteNamespaces();

                return(_odcmModel);
            }
Esempio n. 9
0
        public static void Register(HttpConfiguration config)
        {
            var model2 = EdmxReader.Parse(XmlReader.Create("http://localhost:9091/odata/$metadata"));

            var model = new EdmModel();

            model.AddReferencedModel(model2);

            var reference = new EdmReference("http://localhost:9091/odata/$metadata");

            reference.AddInclude(new EdmInclude("Model2", "SampleService2.Models"));
            model.SetEdmReferences(new List <IEdmReference> {
                reference
            });

            var container = new EdmEntityContainer("NS1", "Default");
            var order     = model2.FindDeclaredType("SampleService2.Models.Order") as IEdmEntityType;

            model2.SetAnnotationValue <ClrTypeAnnotation>(order, new ClrTypeAnnotation(typeof(Order)));
            container.AddEntitySet("Orders", order);
            model.AddElement(container);

            var product = new EdmEntityType("NS1", "Product");

            product.AddKeys(product.AddStructuralProperty("Id", EdmPrimitiveTypeKind.Int32));
            product.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String);
            model.AddElement(product);

            config.MapODataServiceRoute("odata", "odata", model);
        }
Esempio n. 10
0
 public void Configure()
 {
     if (_ctx.ResolveName == null)
     {
         _ctx.ResolveName = t => t.FullName;
     }
     _ctx.Format.LoadServiceModel = () =>
     {
         Uri metadataUri = _ctx.GetMetadataUri();
         if (!models.ContainsKey(metadataUri))
         {
             var       xmlTextReader       = new XmlTextReader(metadataUri.ToString());
             IEdmModel edmModel            = null;
             IEnumerable <EdmError> errors = null;
             if (EdmxReader.TryParse(xmlTextReader, out edmModel, out errors))
             {
                 models[metadataUri] = edmModel;
             }
             else
             {
                 var errorMessageBuilder = new StringBuilder("Model creation failed; please resolve the following errors in the metadata document:");
                 foreach (EdmError error in errors)
                 {
                     errorMessageBuilder.AppendLine(String.Format("t{0}", error.ErrorMessage));
                 }
                 throw new Exception(errorMessageBuilder.ToString());
             }
         }
         return(models[metadataUri]);
     };
     _ctx.Format.UseJson();
     _ctx.SendingRequest2 += ChangeAcceptHeader;
 }
Esempio n. 11
0
        public void CanRenamePropertiesInRegularModelBuilder()
        {
            HttpRequestMessage  request  = new HttpRequestMessage(HttpMethod.Get, BaseAddress + "/explicit/$metadata");
            HttpResponseMessage response = Client.SendAsync(request).Result;
            IEdmModel           model    = EdmxReader.Parse(XmlReader.Create(response.Content.ReadAsStreamAsync().Result));
            // Can change the name of regular, complex and navigation properties.
            IEdmEntityType customer = model.FindDeclaredType("ModelAliasing.Customer") as IEdmEntityType;

            Assert.NotNull(customer);
            Assert.NotNull(customer.FindProperty("FinancialAddress"));
            Assert.NotNull(customer.FindProperty("ClientName"));
            Assert.NotNull(customer.FindProperty("Purchases"));
            // Can change the name of properties on complex objects
            IEdmComplexType address = model.FindDeclaredType("Location.Direction") as IEdmComplexType;

            Assert.NotNull(address);
            Assert.NotNull(address.FindProperty("Reign"));
            //Can change the name of properties on derived entities.
            IEdmEntityType expressOrder = model.FindDeclaredType("Purchasing.ExpressOrder") as IEdmEntityType;

            Assert.NotNull(expressOrder);
            //Can change the name of properties on derived entities when added explicitly.
            Assert.NotNull(expressOrder.FindProperty("Fee"));
            //Data contract attribute doesn't change the name of the property.
            Assert.Null(expressOrder.FindProperty("DeliveryDate"));
            Assert.Null(expressOrder.FindProperty("GuanteedDeliveryDate"));
            // Data contract attribute doesn't change the names of the properties
            IEdmEntityType ordersLines = model.FindDeclaredType("WebStack.QA.Test.OData.ModelAliasing.ModelAliasingMetadataOrderLine") as IEdmEntityType;

            Assert.NotNull(ordersLines);
            Assert.Null(ordersLines.FindProperty("Product"));
            Assert.NotNull(ordersLines.FindProperty("Item"));
            // Data contract attribute doesn't override any explicit configuration on the model builder
            Assert.NotNull(ordersLines.FindProperty("Cost"));
        }
Esempio n. 12
0
        public void CanRenameTypesAndNamespacesInRegularModelBuilder()
        {
            HttpRequestMessage  request  = new HttpRequestMessage(HttpMethod.Get, BaseAddress + "/explicit/$metadata");
            HttpResponseMessage response = Client.SendAsync(request).Result;
            IEdmModel           model    = EdmxReader.Parse(XmlReader.Create(response.Content.ReadAsStreamAsync().Result));
            //Can rename an entity + namespace
            IEdmEntityType customer = model.FindDeclaredType("ModelAliasing.Customer") as IEdmEntityType;

            Assert.NotNull(customer);
            //Explicit configuration on the model builder overrides any configuration on the DataContract attribute.
            IEdmEntityType orders = model.FindDeclaredType("AliasedNamespace.Order") as IEdmEntityType;

            Assert.NotNull(orders);
            //Can rename a derived entity  name + namespace
            IEdmEntityType expressOrder = model.FindDeclaredType("Purchasing.ExpressOrder") as IEdmEntityType;

            Assert.NotNull(expressOrder);
            //DataContract doesn't rename the entity or the namespace
            IEdmEntityType freeDeliveryOrder = model.FindDeclaredType("Purchasing.FreeOrder") as IEdmEntityType;

            Assert.NotNull(freeDeliveryOrder);
            //DataContract doesn't rename the entity or the namespace
            IEdmEntityType ordersLines = model.FindDeclaredType("Billing.OrderLine") as IEdmEntityType;

            Assert.Null(ordersLines);
            //Can change the name and the namespaces for complex types
            IEdmComplexType region = model.FindDeclaredType("Location.PoliticalRegion") as IEdmComplexType;

            Assert.NotNull(region);
            IEdmComplexType address = model.FindDeclaredType("Location.Direction") as IEdmComplexType;

            Assert.NotNull(address);
        }
Esempio n. 13
0
 private static IEdmModel GetEndpointModel(string modelUrl)
 {
     using (WebResponse response = ReaderUtils.CreateRequest(modelUrl).GetResponse())
     {
         return(EdmxReader.Parse(XmlReader.Create(response.GetResponseStream())));
     }
 }
Esempio n. 14
0
        private static async Task RunAsync(EntityMetadataCollection entities)
        {
            try
            {
                var webApiClient   = new WebApiClient();
                var webApiMetadata = await webApiClient.GetWebApiMetadata();

                IEdmModel metadataModel;
                IEnumerable <EdmError> errors;
                bool parseSuccess = EdmxReader.TryParse(XmlReader.Create(new StringReader(webApiMetadata)), out metadataModel, out errors);

                if (parseSuccess)
                {
                    var edmSchemaElements = metadataModel.SchemaElements.Where(se =>
                                                                               se.SchemaElementKind == EdmSchemaElementKind.TypeDefinition &&
                                                                               ExcludedEntities.All(ee => ee.ToLowerInvariant() != se.Name.ToLowerInvariant()));

                    foreach (IEdmSchemaElement schemaElement in edmSchemaElements)
                    {
                        var entity = entities.FirstOrDefault(e => e.LogicalName == schemaElement.Name);
                        if (entity != null)
                        {
                            WriteEntityTsFile(schemaElement as IEdmEntityType, entity);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.Out.WriteLine("Error in RunAsync(): " + e.Message);
            }
            Console.WriteLine("Done! Press any key to close the application");
            Console.Read();
        }
Esempio n. 15
0
        private void ParseBindingWithExpectedErrors(string bindingText, EdmErrorCode errorCode, params string[] messages)
        {
            const string template  = @"<edmx:Edmx Version=""4.0"" xmlns:edmx=""http://docs.oasis-open.org/odata/ns/edmx"">
  <edmx:DataServices>
    <Schema Namespace=""Test"" xmlns=""http://docs.oasis-open.org/odata/ns/edm"">
      <EntityContainer Name=""Container"">
        <EntitySet Name=""EntitySet"" EntityType=""Test.EntityType"">
          {0}
        </EntitySet>
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>";
            string       modelText = string.Format(template, bindingText);

            IEdmModel model;
            IEnumerable <EdmError> errors;

            EdmxReader.TryParse(XElement.Parse(modelText).CreateReader(), out model, out errors).Should().BeFalse();

            errors.Should().HaveCount(messages.Length);
            foreach (var message in messages)
            {
                errors.Should().Contain(e => e.ErrorCode == errorCode && e.ErrorMessage == message);
            }
        }
Esempio n. 16
0
        public void FindVocabularyAnnotationInParallel()
        {
            int annotationCount = 30;
            var edmModel        = new EdmParModel().Model as EdmModel;
            var container       = edmModel.EntityContainer;

            for (int i = 0; i < annotationCount; i++)
            {
                EdmTerm term = new EdmTerm("NS", "Test" + i, EdmPrimitiveTypeKind.String);
                EdmVocabularyAnnotation annotation = new EdmAnnotation(
                    container,
                    term,
                    new EdmStringConstant("desc" + i));
                edmModel.AddVocabularyAnnotation(annotation);
            }

            IEdmModel loadedEdmModel = null;

            using (var ms = new MemoryStream())
            {
                var xw = XmlWriter.Create(ms, new XmlWriterSettings {
                    Indent = true
                });

                IEnumerable <EdmError> errors;
                var res = EdmxWriter.TryWriteEdmx(edmModel, xw, EdmxTarget.OData, out errors);
                xw.Flush();
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                using (var sr = new StreamReader(ms))
                {
                    var metadata = sr.ReadToEnd();
                    loadedEdmModel = EdmxReader.Parse(XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(metadata))));
                }
            }
            container = loadedEdmModel.EntityContainer;

            int errorCount           = 0;
            int totalAnnotationCount = 0;
            int taskCount            = 100;

            Parallel.ForEach(
                Enumerable.Range(0, taskCount),
                index =>
            {
                try
                {
                    var count = loadedEdmModel.FindVocabularyAnnotations(container).ToList().Count();
                    Interlocked.Add(ref totalAnnotationCount, count);
                }
                catch (Exception ew)
                {
                    Console.WriteLine(ew);
                    Interlocked.Increment(ref errorCount);
                }
            });

            Assert.AreEqual(0, errorCount);
            Assert.AreEqual(taskCount * annotationCount, totalAnnotationCount);
        }
Esempio n. 17
0
        public void CheckEdmxVersionMismatch()
        {
            // Edmx namespace is for v 2.0 != Version="4.0"
            const string edmx =
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<edmx:Edmx Version=""2.0"" xmlns:edmx=""http://docs.oasis-open.org/odata/ns/edmx"">
  <edmx:Runtime>
    <edmx:ConceptualModels>
      <Schema Namespace=""NS1"" xmlns=""http://docs.oasis-open.org/odata/ns/edm"">
        <EntityType Name=""Customer"">
          <Key>
            <PropertyRef Name=""CustomerID"" />
          </Key>
          <Property Name=""CustomerID"" Type=""Edm.String"" Nullable=""false"" />
        </EntityType>
        <EntityContainer Name=""C1"">
          <EntitySet Name=""Customers"" EntityType=""NS1.Customer"" />
        </EntityContainer>
      </Schema>
    </edmx:ConceptualModels>
  </edmx:Runtime>
</edmx:Edmx>";

            IEdmModel model;
            IEnumerable <EdmError> errors;
            bool parsed = EdmxReader.TryParse(XmlReader.Create(new StringReader(edmx)), out model, out errors);

            Assert.IsFalse(parsed, "Model failed to parse");
            Assert.IsTrue(errors.Count() == 1, "1 Error");
            Assert.AreEqual(EdmErrorCode.InvalidVersionNumber, errors.First().ErrorCode, "Error code check");
        }
Esempio n. 18
0
        static void Main(string[] args)
        {
            Console.WriteLine("Reading from EDMX file...");

            // reading from edmx file
            var edmxPath = "./Sample_v3.edmx";

            using (var reader = XmlReader.Create(edmxPath))
            {
                const string basePath = "bin/Output/Models";
                Directory.CreateDirectory(basePath);

                // select from all entity sets
                var model       = EdmxReader.Parse(reader);
                var entityTypes = model.EntityContainers().First().EntitySets().Select(set => set.ElementType);
                foreach (var entityType in entityTypes)
                {
                    var entity = EntityDefinition.From(entityType);
                    File.WriteAllText(Path.Combine(basePath, $"{entityType.Name}.cs"), entity.NormalizeWhitespace().ToFullString());
                    Console.WriteLine($"{entityType.Name}");
                }
            }

            Console.WriteLine("All done.");
        }
Esempio n. 19
0
 public static IEdmModel GetModel()
 {
     if (_model == null)
     {
         IEdmModel edmModel;
         IEnumerable <EdmError> edmErrors;
         if (EdmxReader.TryParse(XmlReader.Create(new StringReader(GetEdmx())), out edmModel, out edmErrors))
         {
             _model = edmModel;
             _model.SetAnnotationValue <ClrTypeAnnotation>(_model.FindDeclaredType("ODataDemo.Product"), new ClrTypeAnnotation(typeof(ODataEntityDeserializerTests.Product)));
             _model.SetAnnotationValue <ClrTypeAnnotation>(_model.FindDeclaredType("ODataDemo.Supplier"), new ClrTypeAnnotation(typeof(ODataEntityDeserializerTests.Supplier)));
             _model.SetAnnotationValue <ClrTypeAnnotation>(_model.FindDeclaredType("ODataDemo.Address"), new ClrTypeAnnotation(typeof(ODataEntityDeserializerTests.Address)));
             _model.SetAnnotationValue <ClrTypeAnnotation>(_model.FindDeclaredType("ODataDemo.Category"), new ClrTypeAnnotation(typeof(ODataEntityDeserializerTests.Category)));
             return(_model);
         }
         else
         {
             throw new NotSupportedException(string.Format("Parsing csdl failed with errors {0}", String.Join("\n", edmErrors.Select((edmError => edmError.ErrorMessage)))));
         }
     }
     else
     {
         return(_model);
     }
 }
Esempio n. 20
0
        private IEdmModel LoadModelFromString(string xmlString)
        {
            var tr     = new StringReader(MetaDataAsString);
            var model2 = EdmxReader.Parse(XmlReader.Create(tr));

            return(model2);
        }
Esempio n. 21
0
        public OasisRelationshipChangesAcceptanceTests()
        {
            this.representativeModel = EdmxReader.Parse(XElement.Parse(RepresentativeEdmxDocument).CreateReader());
            var container = this.representativeModel.EntityContainer;

            this.entitySet1 = container.FindEntitySet("EntitySet1");
            this.entitySet2 = container.FindEntitySet("EntitySet2");
            this.entityType = this.representativeModel.FindType("Test.EntityType") as IEdmEntityType;

            this.entitySet1.Should().NotBeNull();
            this.entitySet2.Should().NotBeNull();
            this.entityType.Should().NotBeNull();

            this.navigation1          = this.entityType.FindProperty("navigation") as IEdmNavigationProperty;
            this.navigation2          = this.entityType.FindProperty("NAVIGATION") as IEdmNavigationProperty;
            nonKeyPrincipalNavigation = this.entityType.FindProperty("NonKeyPrincipalNavigation") as IEdmNavigationProperty;

            var derivedType = this.representativeModel.FindType("Test.DerivedEntityType") as IEdmEntityType;

            derivedType.Should().NotBeNull();
            this.derivedNavigation = derivedType.FindProperty("DerivedNavigation") as IEdmNavigationProperty;

            this.navigation1.Should().NotBeNull();
            this.navigation2.Should().NotBeNull();
            this.derivedNavigation.Should().NotBeNull();
        }
Esempio n. 22
0
        private void ParseReferentialConstraintWithExpectedErrors(string referentialConstraintText, EdmErrorCode errorCode, params string[] messages)
        {
            const string template  = @"<edmx:Edmx Version=""4.0"" xmlns:edmx=""http://docs.oasis-open.org/odata/ns/edmx"">
  <edmx:DataServices>
    <Schema Namespace=""Test"" xmlns=""http://docs.oasis-open.org/odata/ns/edm"">
      <EntityType Name=""EntityType"">
        <Key>
          <PropertyRef Name=""ID1"" />
          <PropertyRef Name=""ID2"" />
        </Key>
        <Property Name=""ID1"" Type=""Edm.Int32"" Nullable=""false"" />
        <Property Name=""ID2"" Type=""Edm.Int32"" Nullable=""false"" />
        <Property Name=""ForeignKeyId1"" Type=""Edm.Int32"" />
        <Property Name=""ForeignKeyId2"" Type=""Edm.Int32"" />
        <NavigationProperty Name=""Navigation"" Type=""Test.EntityType"" Nullable=""true"">
          {0}
        </NavigationProperty>
      </EntityType>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>";
            string       modelText = string.Format(template, referentialConstraintText);

            IEdmModel model;
            IEnumerable <EdmError> errors;

            EdmxReader.TryParse(XElement.Parse(modelText).CreateReader(), out model, out errors).Should().BeFalse();

            errors.Should().HaveCount(messages.Length);
            foreach (var message in messages)
            {
                errors.Should().Contain(e => e.ErrorCode == errorCode && e.ErrorMessage == message);
            }
        }
Esempio n. 23
0
        /// <summary>
        /// Easily wrap existing models as referenced models, and return a main model.
        /// </summary>
        /// <param name="namespaceOfContainerToExtend"></param>
        /// <param name="nameOfContainerToExtend"></param>
        /// <param name="referencedModels">Ths first one should have the container (of namespaceOfContainerToExtend) to extend.</param>
        /// <returns>The main model.</returns>
        public static IEdmModel WrapReferencedModelsToMainModel(string namespaceOfContainerToExtend, string nameOfContainerToExtend, params IEdmModel[] referencedModels)
        {
            Assert.True(nameOfContainerToExtend + "_sub" == referencedModels[0].EntityContainer.Name, "the container name of '" + nameOfContainerToExtend + "' will be used by main model, so the container name in referenced model must have been appended with '_sub'.");
            string mainModelxml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<edmx:Edmx Version=""4.0"" xmlns:edmx=""http://docs.oasis-open.org/odata/ns/edmx"">
  <edmx:Reference Uri=""http://host/schema/Location.xml"">
    <edmx:Include Namespace=""Test.Chh"" Alias=""NO_Alias"" />
  </edmx:Reference>
  <edmx:DataServices>
    <Schema Namespace=""{0}"" xmlns=""http://docs.oasis-open.org/odata/ns/edm"">  
        <EntityContainer Name=""{1}"" Extends=""{0}.{1}_sub"">
        </EntityContainer>  
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>";

            mainModelxml = string.Format(mainModelxml, namespaceOfContainerToExtend, nameOfContainerToExtend);
            IEdmModel ret;
            IEnumerable <EdmError> errors;

            if (EdmxReader.TryParse(XmlReader.Create(new StringReader(mainModelxml)), new List <IEdmModel>(referencedModels), out ret, out errors))
            {
                return(ret);
            }

            Assert.False(errors.Any(), "should be zero error.");
            return(null);
        }
Esempio n. 24
0
            public DefaultTestModel()
            {
                this.RepresentativeModel = EdmxReader.Parse(XElement.Parse(RepresentativeEdmxDocument).CreateReader());
                this.EntityContainer     = this.RepresentativeModel.EntityContainer;
                this.EntityContainer.Should().NotBeNull();
                this.EntityContainer.Name.Should().Be("Container");

                this.AddAction          = (IEdmAction)this.RepresentativeModel.FindDeclaredOperations("Test.Add").Single();
                this.OtherAction        = (IEdmAction)this.RepresentativeModel.FindDeclaredOperations("Test.Other").Single();
                this.RemoveBadCarAction = (IEdmAction)this.RepresentativeModel.FindDeclaredOperations("Test.RemoveBadCar").Single();

                this.Get1Function = (IEdmFunction)this.RepresentativeModel.FindDeclaredOperations("Test.Get1").Single();
                this.Get2Function = (IEdmFunction)this.RepresentativeModel.FindDeclaredOperations("Test.Get2").Single();
                var operations = this.RepresentativeModel.FindDeclaredOperations("Test.Get3").ToList();

                this.Get3FunctionOneParam = (IEdmFunction)operations[0];
                this.Get3FunctionNoParams = (IEdmFunction)operations[1];

                this.Get1FunctionImport = (IEdmFunctionImport)this.EntityContainer.FindOperationImports("Get1").Single();
                this.Get2FunctionImport = (IEdmFunctionImport)this.EntityContainer.FindOperationImports("Get2").Single();
                var get3Imports = this.EntityContainer.FindOperationImports("Get3").ToList();

                this.Get3FunctionImportWithOneParam = (IEdmFunctionImport)get3Imports[0];
                this.Get3FunctionImportWithNoParams = (IEdmFunctionImport)get3Imports[1];

                this.PersonType = this.RepresentativeModel.FindDeclaredType("Test.Person") as IEdmEntityType;
                this.PersonType.Should().NotBeNull();

                this.CarType = this.RepresentativeModel.FindDeclaredType("Test.Car") as IEdmEntityType;
                this.CarType.Should().NotBeNull();
            }
 internal static IEdmModel GetDataEdmModel(this ServiceConfiguration serviceConfiguration, ConnectedServiceHandlerContext context = null)
 {
     using (var reader = serviceConfiguration.GetXmlReaderForEndpoint())
     {
         if (EdmxReader.TryParse(reader, out var model, out var parseErrors))
         {
             return(model);
         }
Esempio n. 26
0
        internal virtual IEdmModel LoadModelFromString()
        {
            var tr = new StringReader(MetaDataAsString);

            Model      = EdmxReader.Parse(XmlReader.Create(tr));
            EntitySets = GetEntitySets(Model);
            return(Model);
        }
Esempio n. 27
0
 private IEdmModel LoadModel()
 {
     using (var reader = new XmlTextReader(GetMetadataUri().ToString()))
     {
         IEdmModel model = EdmxReader.Parse(reader);
         return(model);
     }
 }
Esempio n. 28
0
        public ODataAdapter(ISession session, string protocolVersion, string metadataString)
            : this(session, protocolVersion)
        {
            var reader = XmlReader.Create(new StringReader(metadataString));

            reader.MoveToContent();
            Model = EdmxReader.Parse(reader);
        }
 public ODataModelAdapter(string protocolVersion, string metadataString)
     : this(protocolVersion)
 {
     using (var reader = XmlReader.Create(new StringReader(metadataString)))
     {
         reader.MoveToContent();
         Model = EdmxReader.Parse(reader);
     }
 }
 public void KeyAsSegmentEndToEndSmokeTestInJsonLight()
 {
     RunEndToEndSmokeTestWithClient(ctx =>
     {
         ctx.ResolveName = t => t.FullName;
         ctx.ResolveType = n => n.Contains("Customer") ? typeof(Customer) : null;
         ctx.Format.UseJson(EdmxReader.Parse(XmlReader.Create(ctx.GetMetadataUri().AbsoluteUri)));
     });
 }