src/Shared/EntityFramework/Core/Metadata/Edm/CacheForPrimitiveTypes.cs
// <summary>
// Try and get the mapped type for the given primitiveTypeKind in the given dataspace
// </summary>
// <param name="primitiveTypeKind"> The primitive type kind of the primitive type to retrieve </param>
// <param name="facets"> The facets to use in picking the primitive type </param>
// <param name="type"> The resulting type </param>
// <returns> Whether a type was retrieved or not </returns>
Try and get the mapped type for the given primitiveTypeKind in the given dataspace
Try and get the mapped type for the given primitiveTypeKind in the given dataspace
internal bool TryGetType(PrimitiveTypeKind primitiveTypeKind, IEnumerable<Facet> facets, out PrimitiveType type)
        {
            type = null;
            var primitiveTypes = EntityUtil.CheckArgumentOutOfRange(_primitiveTypeMap, (int)primitiveTypeKind, "primitiveTypeKind");
            if ((null != primitiveTypes)
                && (0 < primitiveTypes.Count))
            {
                if (primitiveTypes.Count == 1)
                {
                    type = primitiveTypes[0];
                    return true;
                }
                if (facets == null)
                {
                    var facetDescriptions = EdmProviderManifest.GetInitialFacetDescriptions(primitiveTypeKind);
                    if (facetDescriptions == null)
                    {
                        type = primitiveTypes[0];
                        return true;
                    }
                    Debug.Assert(facetDescriptions.Length > 0);
                    facets = CreateInitialFacets(facetDescriptions);
                }
                Debug.Assert(type == null, "type must be null here");
                var isMaxLengthSentinel = false;
                foreach (var facet in facets)
                {
                    if ((primitiveTypeKind == PrimitiveTypeKind.String ||
                         primitiveTypeKind == PrimitiveTypeKind.Binary)
                        &&
                        facet.Value != null
                        &&
                        facet.Name == DbProviderManifest.MaxLengthFacetName
                        &&
                        Helper.IsUnboundedFacetValue(facet))
                    {
                        isMaxLengthSentinel = true;
                        continue;
                    }
                }
                var maxLength = 0;
                foreach (var primitiveType in primitiveTypes)
                {
                    if (isMaxLengthSentinel)
                    {
                        if (type == null)
                        {
                            type = primitiveType;
                            maxLength =
                                Helper.GetFacet(primitiveType.FacetDescriptions, DbProviderManifest.MaxLengthFacetName).MaxValue.Value;
                        }
                        else
                        {
                            var newMaxLength =
                                Helper.GetFacet(primitiveType.FacetDescriptions, DbProviderManifest.MaxLengthFacetName).MaxValue.Value;
                            if (newMaxLength > maxLength)
                            {
                                type = primitiveType;
                                maxLength = newMaxLength;
                            }
                        }
                    }
                    else
                    {
                        type = primitiveType;
                        break;
                    }
                }
                Debug.Assert(type != null);
                return true;
            }
            return false;
        }
internal bool TryGetType ( PrimitiveTypeKind primitiveTypeKind , IEnumerable < Facet > facets , out PrimitiveType type ) { type = null ; var primitiveTypes = EntityUtil . CheckArgumentOutOfRange ( _primitiveTypeMap , ( int ) primitiveTypeKind , " " ) ; if ( ( null != primitiveTypes ) && ( 0 < primitiveTypes . Count ) ) { if ( primitiveTypes . Count == 1 ) { type = primitiveTypes [ 0 ] ; return true ; } if ( facets == null ) { var facetDescriptions = EdmProviderManifest . GetInitialFacetDescriptions ( primitiveTypeKind ) ; if ( facetDescriptions == null ) { type = primitiveTypes [ 0 ] ; return true ; } Debug . Assert ( facetDescriptions . Length > 0 ) ; facets = CreateInitialFacets ( facetDescriptions ) ; } Debug . Assert ( type == null , " " ) ; var isMaxLengthSentinel = false ; foreach ( var facet in facets ) { if ( ( primitiveTypeKind == PrimitiveTypeKind . String || primitiveTypeKind == PrimitiveTypeKind . Binary ) && facet . Value != null && facet . Name == DbProviderManifest . MaxLengthFacetName && Helper . IsUnboundedFacetValue ( facet ) ) { isMaxLengthSentinel = true ; continue ; } } var maxLength = 0 ; foreach ( var primitiveType in primitiveTypes ) { if ( isMaxLengthSentinel ) { if ( type == null ) { type = primitiveType ; maxLength = Helper . GetFacet ( primitiveType . FacetDescriptions , DbProviderManifest . MaxLengthFacetName ) . MaxValue . Value ; } else { var newMaxLength = Helper . GetFacet ( primitiveType . FacetDescriptions , DbProviderManifest . MaxLengthFacetName ) . MaxValue . Value ; if ( newMaxLength > maxLength ) { type = primitiveType ; maxLength = newMaxLength ; } } } else { type = primitiveType ; break ; } } Debug . Assert ( type != null ) ; return true ; } return false ; }
Try and get the mapped type for the given primitiveTypeKind in the given dataspace
Try and get the mapped type for the given primitiveTypeKind in the given dataspace
// Now, see if we have any types for this model type, if so, loop through to find the best matching one // Create a dictionary of facets for easy lookup // MaxLength has the sentinel value. So this facet need not be added. // Find a primitive type with the matching constraint
Whether a type was retrieved or not
Whether a type was retrieved or not
primitiveTypeKind
PrimitiveTypeKind
The primitive type kind of the primitive type to retrieve
The primitive type kind of the primitive type to retrieve
facets
IEnumerable<Facet>
The facets to use in picking the primitive type
The facets to use in picking the primitive type
PrimitiveType
out
type
The resulting type
The resulting type