0

dotConnect for PostgreSQLのプロフェッショナル版を使用して、データベースからモデルを作成しました。エンティティの1つを除いて、すべてが正常に機能します。一部のプロパティは 10 進数として生成されました。my のサンプル プロパティEntity:

public global::System.Nullable<decimal> CollectionToPay
{
    get
    {
        global::System.Nullable<decimal> value = _CollectionToPay;
        OnGetCollectionToPay(ref value);
        return value;
    }
    set
    {
        if (_CollectionToPay != value)
        {
          OnCollectionToPayChanging(ref value);
          ReportPropertyChanging("CollectionToPay");
          _CollectionToPay = StructuralObject.SetValidValue(value);
          ReportPropertyChanged("CollectionToPay");
          OnCollectionToPayChanged();
      }
    }
}

private global::System.Nullable<decimal> _CollectionToPay;

エンティティのコレクションを取得しようとすると、エラーが発生します:

Devart.Data.PostgreSql.dll で「System.OverflowException」タイプの初回例外が発生しました

追加情報: Decimal に対して値が大きすぎるか小さすぎます。

どの行で問題が発生するかさえわかりません。私は約400行をフェッチしています。問題のある行をすばやく特定する方法はありますか? テーブルには約 170 の列があり、約 20 は 10 進数型です。pgAdmin で行をフェッチしましたが、値が大きすぎたり小さすぎたりするようには見えません。私に何ができる?decimalに変更すると思いますがdouble、まず問題のある行を見つける必要があります。

4

1 に答える 1

2

C#Decimalは境界型です。これは 128 ビットの固定サイズの値です。おそらく、IEEE 574:2008decimal128または同等のものです。

これはPostgreSQL のtypeと同等ではありません。(これを見せればよかったのに)。は、任意の精度と位取りの 2 進化 10 進数です。その実質的な限界は約 1GB ですが、それは想像を絶するほど巨大です。numericnumeric

numericC# の に保存することはできませんDecimal。アプリケーションには、 に保存できない値が含まれている可能性がありますDecimal

C# でバイナリ コード化された 10 進データ型の実装を見つけるか、データを調整して範囲外の値を排除する必要がある場合があります。

列に制約を追加して値の範囲を制限する場合は、マップnumericしても問題ありません。個人的には、タイプを使用してこれを行うことをお勧めします。DecimalCHECKnumericDOMAIN

于 2014-08-06T12:24:57.860 に答える