我有一个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
感谢您提供的任何潜在客户!
答案 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;
正常工作!