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
,但首先我需要找到有问题的行。
c#的Decimal
是一个有界类型:它是一个128位固定大小的值。大概是IEEE 574:2008 decimal128
或同等标准。
这是不是等同于PostgreSQL的numeric
类型,这是我假设你是映射到它。(如果你能展示这个就太好了)。numeric
是任意精度和比例的二进制编码的十进制。它的实际限制是1GB左右,但这是一个难以想象的大数字。
你不能在c#的Decimal
中存储任何可能的numeric
。假定您的应用程序包含不能存储在Decimal
中的值。
你可能需要在c#中找到一个二进制编码的十进制数据类型实现,或者调整你的数据来消除超出范围的值。
如果您在numeric
列上添加CHECK
约束以限制其值范围,则可以将numeric
映射到Decimal
。我个人建议使用DOMAIN
字体。