0

我已经使用 dotConnect for PostgreSQL专业版从数据库创建模型。一切正常,除了实体之一。一些属性生成为十进制。我的示例属性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 列是十进制类型。我在 pgAdmin 中获取了行,但没有值看起来太大/太小。我能做些什么?我想我会改成decimaldouble但首先我需要找到有问题的行。

4

1 回答 1

2

C#Decimal是有界类型:它是一个 128 位固定大小的值。大概是IEEE 574:2008decimal128或同等标准。

等同于PostgreSQL 的numerictype,我认为您将其映射到。(如果你展示这个就好了)。numeric任意精度和比例的二进制编码的十进制。它的实际限制在 1GB 左右,但它是如此之大,以至于它是一个难以想象的数字。

您不能将任何可能存储numeric在 C# 的Decimal. 大概您的应用程序包含无法存储在Decimal.

您可能需要在 C# 中找到二进制编码的十进制数据类型实现,或者调整您的数据以消除超出范围的值。

如果您向列添加约束以限制其值范围,则可以映射numeric到。我个人建议使用类型来执行此操作。DecimalCHECKnumericDOMAIN

于 2014-08-06T12:24:57.860 回答