【问题标题】:Entity framework database first not accepting values with 12 decimal places实体框架数据库首先不接受小数点后 12 位的值
【发布时间】:2019-03-14 15:34:08
【问题描述】:

在我的数据库中,我有一列用十进制 (30,12) 定义。 我正在尝试使用最多 12 位的小数更新列值。 但是当我从实体框架执行 dbcontext.save 时,它​​给了我错误“转换溢出”。基本上我想支持一个十进制,左边有 14 个 diit,右边有 12 个数字。 (12345678998734.898989898989)

【问题讨论】:

  • 您使用的数据库是什么?此外,该列应定义为十进制(26,12)。根据数据库的版本,十进制的最大精度限制会有所不同。
  • 以防万一,您的 dbcontext 是否与数据库同步?如果您在更新 edmx 后更新了数据库,可能会发生这种情况

标签: c# database entity-framework


【解决方案1】:

SQL Server 中允许的最大精度为 38。但 SQL Server 十进制数据类型在其整个范围内未映射到 .Net 十进制。 .Net 十进制类型仅映射到十进制(29,X)范围内的 SQL Server 之一。 (source)

这意味着,如果您有一个精度高于 29 的小数列并且无论小数位数如何,您都将无法使用本机 .Net 数据类型。

尝试使用 SqlDecimal 类型。

Full rules of SQL type

【讨论】:

  • SQL server 允许的最大精度确实是 38,但是 decimal(30,12) 的精度是 30,小数位数是 12。这些值不是累积的。因此,它应该适合 SQL 服务器范围。
  • 同意@Kami。我使用的小数(30,12)精度为 30,比例为 12。所以它应该很容易取总长度 = 30 和小数点后 12 位的十进制值。但就我而言,它是 int。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
相关资源
最近更新 更多