【发布时间】: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