NHibernate / Oracle: как вставить большое число в столбец BINARY_DOUBLE? - PullRequest
0 голосов
/ 21 января 2011

У меня есть свойство C # System.Double, которое может содержать значение, например 1e250:

public virtual double DoubleValue {get; set;}

Свойство сопоставлено столбцу BINARY_DOUBLE:

<property name="DoubleValue" column="VALUE_BINARY_DOUBLE"/>

Максимальное значение для Binary_Double составляет около 1.7e + 308 ( Oracle doc ), но я получаю исключение:
ORA-01426: числовое переполнение

Проблема появляется даже при выполнении запроса через SQL +. Я должен использовать приведение TO_BINARY_DOUBLE, чтобы заставить его работать. В моем понимании предоставленное число неявно преобразуется в NUMBER: мой запрос работает с 1e125 (максимум для NUMBER - 1e126), но не будет работать с 1e250.

Я также попробовал эти сопоставления, но безуспешно:

<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="System.Double"/>
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="binary"/>

Использование: Oracle 11G - NHibernate 2.1.0 - .Net 3.5 SP1

Спасибо за любую информацию, которую вы можете предоставить!

1 Ответ

0 голосов
/ 02 марта 2011

Вот обходной путь, который мы используем, так как мы не нашли никакого решения:
Добавить недвижимость в C #:

public virtual string DatabaseDoubleValue
{
    get
    {
        return DoubleValue.ToString();
    }
    set
    {
        DoubleValue = double.Parse(value);
    }
}

Изменить отображение на

<property name="DatabaseDoubleValue" column="VALUE_BINARY_DOUBLE"/>

Добавить триггер для столбца VALUE_BINARY_DOUBLE:

FOR EACH ROW
BEGIN
    :NEW.VALUE_BINARY_DOUBLE := TO_BINARY_DOUBLE(:NEW.VALUE_BINARY_DOUBLE);
END;

Работает нормально таким образом!

...