Esempio n. 1
0
        internal IEdmTypeReference EnsureTypeReference(ResourceType resourceType, List <KeyValuePair <string, object> > customAnnotations)
        {
            switch (resourceType.ResourceTypeKind)
            {
            case ResourceTypeKind.EntityType:
            {
                bool?andRemoveNullableFacet = MetadataProviderUtils.GetAndRemoveNullableFacet(customAnnotations);
                bool nullable = andRemoveNullableFacet.HasValue ? andRemoveNullableFacet.Value : true;
                return(this.EnsureSchemaType(resourceType).ToTypeReference(nullable));
            }

            case ResourceTypeKind.ComplexType:
            {
                bool?   nullable2  = MetadataProviderUtils.GetAndRemoveNullableFacet(customAnnotations);
                bool    flag2      = this.GetDataServiceVersion() >= RequestDescription.Version3Dot0;
                Version edmVersion = this.GetEdmVersion();
                if ((edmVersion != null) && (edmVersion < MetadataEdmSchemaVersion.Version3Dot0.ToVersion()))
                {
                    flag2 = false;
                }
                bool flag3 = nullable2.HasValue ? nullable2.Value : flag2;
                return(this.EnsureSchemaType(resourceType).ToTypeReference(flag3));
            }

            case ResourceTypeKind.Primitive:
                return(MetadataProviderUtils.CreatePrimitiveTypeReference(resourceType, customAnnotations));

            case ResourceTypeKind.Collection:
                return(this.EnsurePrimitiveOrComplexCollectionType(resourceType, customAnnotations).ToTypeReference(true));

            case ResourceTypeKind.EntityCollection:
                return(this.EnsureEntityCollectionType(resourceType, customAnnotations).ToTypeReference(true));
            }
            throw new InvalidOperationException(System.Data.Services.Strings.MetadataProviderEdmModel_UnsupportedResourceTypeKind(resourceType.ResourceTypeKind.ToString()));
        }
Esempio n. 2
0
        private IEdmCollectionType EnsureCollectionItemTypeIsPrimitiveOrComplex(ResourceType itemResourceType, List <KeyValuePair <string, object> > customAnnotations)
        {
            IEdmCollectionType type;

            if (!this.primitiveOrComplexCollectionTypeCache.TryGetValue(itemResourceType, out type))
            {
                IEdmTypeReference reference;
                switch (itemResourceType.ResourceTypeKind)
                {
                case ResourceTypeKind.ComplexType:
                    reference = this.EnsureTypeReference(itemResourceType, customAnnotations);
                    reference = reference.IsNullable ? reference.Clone(false) : reference;
                    break;

                case ResourceTypeKind.Primitive:
                {
                    MetadataProviderUtils.GetAndRemoveNullableFacet(customAnnotations);
                    IEdmPrimitiveTypeReference typeReference = MetadataProviderUtils.CreatePrimitiveTypeReference(itemResourceType, customAnnotations);
                    reference = typeReference.IsNullable ? typeReference.Clone(false) : typeReference;
                    break;
                }

                default:
                    throw new InvalidOperationException(System.Data.Services.Strings.MetadataProviderEdmModel_UnsupportedCollectionItemType_PrimitiveOrComplex(itemResourceType.ResourceTypeKind.ToString()));
                }
                type = new EdmCollectionType(reference);
                this.primitiveOrComplexCollectionTypeCache.Add(itemResourceType, type);
            }
            return(type);
        }