internal override bool TryGetTypeByName(
            string fullName,
            bool ignoreCase,
            out TypeUsage typeUsage)
        {
            typeUsage = (TypeUsage)null;
            MappingBase map = (MappingBase)null;

            if (this.MetadataWorkspace.TryGetMap(fullName, DataSpace.OSpace, ignoreCase, DataSpace.OCSpace, out map))
            {
                if (map.EdmItem.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType)
                {
                    PrimitiveType mappedPrimitiveType = this.MetadataWorkspace.GetMappedPrimitiveType(((PrimitiveType)map.EdmItem).PrimitiveTypeKind, DataSpace.CSpace);
                    if (mappedPrimitiveType != null)
                    {
                        typeUsage = EdmProviderManifest.Instance.GetCanonicalModelTypeUsage(mappedPrimitiveType.PrimitiveTypeKind);
                    }
                }
                else
                {
                    typeUsage = ClrPerspective.GetMappedTypeUsage(map);
                }
            }
            return(null != typeUsage);
        }
        // <summary>
        // This internal method ensures that the specified type is a scalar
        // type supported by the underlying provider by ensuring that scalar
        // metadata for this type is retrievable.
        // </summary>
        internal bool ValidateParameterType(ClrPerspective perspective)
        {
            TypeUsage type;

            // The parameter type metadata is only valid if it's scalar or enumeration type metadata.
            if ((perspective.TryGetType(_mappableType, out type))
                && (TypeSemantics.IsScalarType(type)))
            {
                return true;
            }

            return false;
        }