NHibernate / Oracle:如何在BINARY_DOUBLE列中插入大数字?

时间:2011-01-21 09:29:55

标签: c# oracle nhibernate-mapping ora-01426

我有一个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 :(得分:0)

以下是我们使用的解决方法,因为我们找不到任何解决方案:
在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;

正常工作!