0

1e250 のような値を含む可能性のある C# System.Double プロパティがあります。

public virtual double DoubleValue {get; set;}

プロパティは BINARY_DOUBLE 列にマップされます:

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

Binary_Double の最大値は約 1.7e+308 ( Oracle ドキュメント) ですが、例外が発生しています:
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

あなたが提供する可能性のあるリードをありがとう!

4

1 に答える 1

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;

その方法でうまくいきます!

于 2011-03-02T10:36:58.193 に答える