Пример #1
0
        private EntityType ParseEntityType(EdmXNames edm, XElement entityTypeEl)
        {
            var propertyEls      = entityTypeEl.Elements(edm.Property);
            var entityProperties = new List <EntityProperty>();

            foreach (var el in propertyEls)
            {
                var name          = el.Attribute("Name").Value;
                var type          = el.Attribute("Type").Value;
                var nullable      = bool.Parse(el.Attribute("Nullable")?.Value ?? "true");
                var targetPath    = el.Attribute(_xnameTargetPath)?.Value;
                var contentKind   = el.Attribute(_xnameContentKind)?.Value;
                var keepInContent = bool.Parse(el.Attribute(_xnameKeepInContent)?.Value ?? "true");

                entityProperties.Add(new EntityProperty
                {
                    Name          = name,
                    Type          = type,
                    Nullable      = nullable,
                    TargetPath    = targetPath,
                    ContentKind   = contentKind,
                    KeepInContent = keepInContent,
                });
            }

            return(new EntityType
            {
                Properties = entityProperties,
            });
        }
Пример #2
0
        public async Task <Metadata> ParseMetadataAsync(Stream stream)
        {
            var doc = await ParseXmlAsync(stream);

            ValidateRootElement(doc, _xnameEdmx);

            var dataServices = doc.Root.Element(_xnameDataServices);

            // Discover EDM version.
            var edmNs = dataServices
                        .Elements()
                        .Where(x => x.Name.LocalName == EdmXNames.Edm200604.Schema.LocalName)
                        .Select(x => x.Name.NamespaceName)
                        .First();
            var edm = EdmXNames.GetInstance(edmNs);

            var packagesEntitySet = dataServices
                                    .Elements(edm.Schema)
                                    .SelectMany(x => x.Elements(edm.EntityContainer))
                                    .SelectMany(x => x.Elements(edm.EntitySet))
                                    .First(x => x.Attribute("Name").Value == "Packages");
            var packagesEntityType = packagesEntitySet.Attribute("EntityType").Value;

            var metadata = new Metadata();

            foreach (var schemaEl in dataServices.Elements(edm.Schema))
            {
                var schemaNamespace = schemaEl.Attribute("Namespace").Value;
                foreach (var entityTypeEl in schemaEl.Elements(edm.EntityType))
                {
                    var entityName = entityTypeEl.Attribute("Name").Value;
                    var entityType = $"{schemaNamespace}.{entityName}";
                    if (entityType == packagesEntityType)
                    {
                        metadata.PackageEntityType = ParseEntityType(edm, entityTypeEl);
                    }
                }
            }

            return(metadata);
        }