SubSonic: MaxLength TableColumn (превышение) - PullRequest
1 голос
/ 20 января 2010

Итак, мы используем SubSonic в качестве нашего DAL / ORM для одного из наших проектов.Все работает гладко (база данных уже существует, поэтому мы использовали SubSonic поверх нее), однако, иногда мы сталкиваемся с исключением, которое говорит, что что-то вроде целого числа превышает максимальную длину.В этом примере наше поле MySql имеет знак int (4).Что, согласно документации MySql, допускает диапазон следующих значений:

-2147483647 до 2147483647.

Теперь мой вопрос, как MaxLength продиктован в SubSonic?Количество цифр?Потому что это означает, что это позволит только от -9999 до 9999, правильно?Это кажется довольно большим расхождением, и я надеюсь, что это не так, иначе у нас будет куча других проблем.

Спасибо, Steve

1 Ответ

0 голосов
/ 20 января 2010

Использование Reflector и детализация до функции Save ActiveRecord (которая вызывает ValidateColumnSettings):

 if ((!flag && (column.MaxLength > 0)) && ((column.DataType != DbType.Boolean) && (currentValue.ToString().Length > column.MaxLength)))
        {
            Utility.WriteTrace(string.Format("Max Length Exceeded {0} (can't exceed {1}); current value is set to {2}", column.ColumnName, column.MaxLength, currentValue.ToString().Length));
            this.errorList.Add(string.Format(this.LengthExceptionMessage, str, column.MaxLength));
        }

флаг установлен в значение true, если переменная равна нулю. Так что, да, он уходит из числа цифр (см .: ToString (). Длина). Похоже, в этом нет никакого смысла, поскольку MySql не использует свойство длины типа данных для определения количества цифр для целочисленных значений.

Это SubSonic 2.2.

...