【问题标题】:Cannot update Decimal (30,18) value in Sql Server无法更新 Sql Server 中的十进制 (30,18) 值
【发布时间】:2020-01-03 18:13:03
【问题描述】:

我正在尝试使用 MVC 5 应用程序的实体框架更新 sql server 2012 中的值。该字段是Decimal(30,18)。我首先设置成功存储的值 120。然后,当我尝试通过设置 121 来更新值时,我在SaveChanges() 上得到以下异常@

System.InvalidOperationException:十进制类型的给定值 从数据源无法转换为指定的十进制类型 目标列。 ---> System.ArgumentException:参数值 “121.0000000000000000000”超出范围。

我尝试过使用小数精度,但这对我来说毫无意义。据我所知,30,18 意味着我可以有 30 位数字,其中 18 位可以是小数点,因此不应抛出上述异常。

我添加了更多代码以帮助解决此问题。我正在使用自动映射器,但即使我只执行以下操作,我也会遇到同样的错误。

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(0, 15, 0)))
{
     Product.Categories.FirstOrDefault().Instrument_Entry_Cost = 3.4M;
     this.DbContext.SaveChanges();
     scope.Complete();
}

我还注意到,如果我转到 SQL Server 并手动将值 3,4 设置为它接受的特定列。只有当我尝试通过实体框架更新值时才会出现此问题

【问题讨论】:

  • 请发MCVE
  • 能否也分享一下 UPDATE 查询?
  • 我没有使用 sql 更新查询。我正在使用实体框架更新实体。我检索数据库记录,更改十进制值,然后使用上下文(dbcontext.SaveChanges())保存更改
  • 更新了代码并提供更多信息@Andres2142
  • 既然它是 InvalidOperationException 而不是 SQL 异常,可能模型与 SQL Server 表不更新?

标签: c# asp.net-mvc-5 entity-framework-6


【解决方案1】:

我建议将字段类型 Decimal 更改为 float

【讨论】:

  • 我不能这样做,因为我需要将小数精度设置为 (30,18)。我需要保持精度并用更大的小数更新实体
猜你喜欢
  • 1970-01-01
  • 2019-10-23
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多