private static EdmProperty ConvertToProperty(
            StructuredProperty somProperty,
            DbProviderManifest providerManifest,
            Converter.ConversionCache convertedItemCache,
            Dictionary <SchemaElement, GlobalItem> newGlobalItems)
        {
            ScalarType type = somProperty.Type as ScalarType;
            TypeUsage  typeUsage;

            if (type != null && somProperty.Schema.DataModel != SchemaDataModelOption.EntityDataModel)
            {
                typeUsage = somProperty.TypeUsage;
                Converter.UpdateSentinelValuesInFacets(ref typeUsage);
            }
            else
            {
                EdmType edmType = type == null ? (EdmType)Converter.LoadSchemaElement(somProperty.Type, providerManifest, convertedItemCache, newGlobalItems) : (EdmType)convertedItemCache.ItemCollection.GetItem <PrimitiveType>(somProperty.TypeUsage.EdmType.FullName);
                if (somProperty.CollectionKind != CollectionKind.None)
                {
                    typeUsage = TypeUsage.Create((EdmType) new CollectionType(edmType));
                }
                else
                {
                    SchemaEnumType schemaEnumType = type == null ? somProperty.Type as SchemaEnumType : (SchemaEnumType)null;
                    typeUsage = TypeUsage.Create(edmType);
                    if (schemaEnumType != null)
                    {
                        somProperty.EnsureEnumTypeFacets(convertedItemCache, newGlobalItems);
                    }
                    if (somProperty.TypeUsage != null)
                    {
                        Converter.ApplyTypePropertyFacets(somProperty.TypeUsage, ref typeUsage);
                    }
                }
            }
            Converter.PopulateGeneralFacets(somProperty, ref typeUsage);
            EdmProperty edmProperty = new EdmProperty(somProperty.Name, typeUsage);

            if (somProperty.Documentation != null)
            {
                edmProperty.Documentation = Converter.ConvertToDocumentation(somProperty.Documentation);
            }
            Converter.AddOtherContent((SchemaElement)somProperty, (MetadataItem)edmProperty);
            return(edmProperty);
        }