Exemplo n.º 1
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        protected override RelationalTypeMapping FindMapping(RelationalTypeMappingInfo mappingInfo)
        {
            var targetClrType = mappingInfo.ProviderClrType;

            if (targetClrType != null &&
                _namedClrMappings.TryGetValue(targetClrType.FullName, out var mappingFunc))
            {
                return(mappingFunc(targetClrType));
            }

            var storeTypeName = mappingInfo.StoreTypeName;

            if (storeTypeName != null)
            {
                if (_sqlVariant.StoreType.Equals(storeTypeName, StringComparison.OrdinalIgnoreCase) &&
                    targetClrType == typeof(object))
                {
                    return(_sqlVariant.Clone(storeTypeName, null));
                }

                if ((storeTypeName.StartsWith("float", StringComparison.OrdinalIgnoreCase) ||
                     storeTypeName.StartsWith("double precision", StringComparison.OrdinalIgnoreCase)) &&
                    TryParseScale(storeTypeName, out var scale) &&
                    scale <= 24)
                {
                    return(_real.Clone(storeTypeName, null));
                }
            }

            return(base.FindMapping(mappingInfo));
        }