PostgreSQL的dotConnection溢出异常

本文关键字:异常 溢出 dotConnection PostgreSQL | 更新日期: 2023-09-27 18:16:43

我使用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;

当我尝试获取实体集合时,我得到一个错误:

类型为'System '的第一次异常。OverflowException的发生在Devart.Data.PostgreSql.dll

附加信息:值对于a来说太大或太小小数。

我甚至不知道哪一行出了问题。我取了大约400行。有什么快速的方法来确定问题行吗?表格大约有170列,大约20列是十进制类型。我已经在pgAdmin中获取行,但非值看起来太大/小。我能做什么?我想我会将decimal更改为double,但首先我需要找到有问题的行。

PostgreSQL的dotConnection溢出异常

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

这是不是等同于PostgreSQL的numeric类型,这是我假设你是映射到它。(如果你能展示这个就太好了)。numeric是任意精度和比例的二进制编码的十进制。它的实际限制是1GB左右,但这是一个难以想象的大数字。

你不能在c#的Decimal中存储任何可能的numeric。假定您的应用程序包含不能存储在Decimal中的值。

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

如果您在numeric列上添加CHECK约束以限制其值范围,则可以将numeric映射到Decimal。我个人建议使用DOMAIN字体。