private static TypeUsage GetEdmTypeUsage(EdmTypeReference edmTypeReference)
        {
            Contract.Requires(edmTypeReference != null);

            var primitiveTypeFacets = edmTypeReference.PrimitiveTypeFacets;

            var primitiveTypeKind = edmTypeReference.UnderlyingPrimitiveType.PrimitiveTypeKind;

            var primitiveType = PrimitiveType.GetEdmPrimitiveType((PrimitiveTypeKind)primitiveTypeKind);

            if (edmTypeReference.PrimitiveType
                == EdmPrimitiveType.String)
            {
                if ((primitiveTypeFacets.IsUnicode != null)
                    && (primitiveTypeFacets.IsFixedLength != null))
                {
                    return (primitiveTypeFacets.MaxLength != null)
                               ? TypeUsage.CreateStringTypeUsage(
                                   primitiveType,
                                   primitiveTypeFacets.IsUnicode.Value,
                                   primitiveTypeFacets.IsFixedLength.Value,
                                   primitiveTypeFacets.MaxLength.Value)
                               : TypeUsage.CreateStringTypeUsage(
                                   primitiveType,
                                   primitiveTypeFacets.IsUnicode.Value,
                                   primitiveTypeFacets.IsFixedLength.Value);
                }
            }

            if (edmTypeReference.PrimitiveType
                == EdmPrimitiveType.Binary)
            {
                if (primitiveTypeFacets.IsFixedLength != null)
                {
                    return (primitiveTypeFacets.MaxLength != null)
                               ? TypeUsage.CreateBinaryTypeUsage(
                                   primitiveType,
                                   primitiveTypeFacets.IsFixedLength.Value,
                                   primitiveTypeFacets.MaxLength.Value)
                               : TypeUsage.CreateBinaryTypeUsage(
                                   primitiveType,
                                   primitiveTypeFacets.IsFixedLength.Value);
                }
            }

            if ((edmTypeReference.PrimitiveType == EdmPrimitiveType.Time)
                && (primitiveTypeFacets.Precision != null))
            {
                return TypeUsage.CreateTimeTypeUsage(
                    primitiveType,
                    primitiveTypeFacets.Precision);
            }

            if ((edmTypeReference.PrimitiveType == EdmPrimitiveType.DateTime)
                && (primitiveTypeFacets.Precision != null))
            {
                return TypeUsage.CreateDateTimeTypeUsage(
                    primitiveType,
                    primitiveTypeFacets.Precision);
            }

            if ((edmTypeReference.PrimitiveType == EdmPrimitiveType.DateTimeOffset)
                && (primitiveTypeFacets.Precision != null))
            {
                return TypeUsage.CreateDateTimeOffsetTypeUsage(
                    primitiveType,
                    primitiveTypeFacets.Precision);
            }

            if (edmTypeReference.PrimitiveType
                == EdmPrimitiveType.Decimal)
            {
                return ((primitiveTypeFacets.Precision != null)
                        && primitiveTypeFacets.Scale != null)
                           ? TypeUsage.CreateDecimalTypeUsage(
                               primitiveType,
                               primitiveTypeFacets.Precision.Value,
                               primitiveTypeFacets.Scale.Value)
                           : TypeUsage.CreateDecimalTypeUsage(primitiveType);
            }

            return TypeUsage.CreateDefaultTypeUsage(primitiveType);
        }
 private void WritePropertyTypeFacets(EdmTypeReference typeRef)
 {
     if (typeRef.PrimitiveTypeFacets != null)
     {
         foreach (var facet in GetEnumerableFacetValueFromPrimitiveTypeFacets(typeRef.PrimitiveTypeFacets))
         {
             _xmlWriter.WriteAttributeString(facet.Key, facet.Value);
         }
     }
     if (typeRef.IsNullable.HasValue)
     {
         _xmlWriter.WriteAttributeString(
             CsdlConstants.Attribute_Nullable, GetLowerCaseStringFromBoolValue(typeRef.IsNullable.Value));
     }
 }
Esempio n. 3
0
 protected virtual void VisitEdmTypeReference(EdmTypeReference reference)
 {
     VisitEdmMetadataItem(reference);
     if (reference.HasFacets)
     {
         VisitEdmPrimitiveTypeFacets(reference.PrimitiveTypeFacets);
     }
 }
        private static string GetTypeReferenceName(EdmTypeReference typeReference)
        {
            Contract.Assert(!typeReference.IsCollectionType, "Primitive, Enum or Complex property type expected");

            if (typeReference.IsPrimitiveType)
            {
                return GetTypeNameFromPrimitiveTypeKind(typeReference.PrimitiveType.PrimitiveTypeKind);
            }

            if (typeReference.IsComplexType)
            {
                return GetQualifiedTypeName(CsdlConstants.Value_Self, typeReference.ComplexType.Name);
            }

            Contract.Assert(typeReference.IsEnumType);

            return GetQualifiedTypeName(CsdlConstants.Value_Self, typeReference.EnumType.Name);
        }