Exemplo n.º 1
0
        /// <exception cref="MicroOrmException"/>
        /// <returns>CLR значение.</returns>
        private object?AccumulateCtorParameter(DbDataReader reader, int ordinal, string sqlColumnName, ConstructorArgument ctorArg)
        {
            object sqlRawValue = ReadSqlRawValue(reader, ordinal, out Type sqlColumnType);

            if (_activator.Contract.TryGetOrmProperty(sqlColumnName, out OrmProperty? ormProperty))
            {
                return(ormProperty.ConvertSqlToClrValue(sqlRawValue, sqlColumnType, sqlColumnName));
            }
            else
            {
                if (ctorArg.TypeConverter != null && ctorArg.TypeConverter.CanConvertFrom(sqlColumnType))
                {
                    object?sqlValue = SqlTypeConverter.ConvertNullableRawSqlType(sqlRawValue, sqlColumnName,
                                                                                 ctorArg.IsNonNullable, ctorArg.ParameterName, "parameter");

                    return(ctorArg.TypeConverter.ConvertFrom(sqlValue));
                }
                else
                {
                    // конвертируем значение.
                    return(SqlTypeConverter.ConvertSqlToCtorValue(sqlRawValue, sqlColumnType,
                                                                  sqlColumnName, ctorArg.IsNonNullable, ctorArg.ParameterName, ctorArg.ParameterType));
                }
            }
        }
Exemplo n.º 2
0
        /// <param name="sqlColumnName">Используется только для ошибок.</param>
        /// <exception cref="MicroOrmException"/>
        /// <returns>CLR значение.</returns>
        public object?ConvertSqlToClrValue(object sqlRawValue, Type sqlColumnType, string sqlColumnName)
        {
            object?sqlValue = SqlTypeConverter.ConvertNullableRawSqlType(sqlRawValue, sqlColumnName, IsNonNullable, PropertyName, "property");

            if (TypeConverter != null)
            {
                if (TypeConverter.CanConvertFrom(sqlColumnType))
                {
                    return(TypeConverter.ConvertFrom(sqlValue));
                }
                else
                // Безусловно вызываем конвертацию.
                {
                    return(TypeConverter.ConvertTo(sqlValue, MemberType));
                }
            }
            else
            {
                return(SqlTypeConverter.ConvertSqlToClrType(sqlValue, sqlColumnType, sqlColumnName, MemberType));
            }
        }