You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF6数据库优先模式下decimal字段插入值超出范围问题求助

EF6数据库优先模式下decimal(16,2)字段插入报错解决办法

问题场景

采用Database First(数据库优先)模式搭配EF6和SQL Server,数据库中MyTable表的Amount字段类型为decimal(16, 2)。执行以下插入代码时:

MyTable table = New MyTable With {
    .ID = Guid.NewGuid(),  
    .Amount = 100D
};

dbContext.MyTable.Add(table);

提交更改后抛出错误:

ArgumentException: 参数值 '100,0000000000000000' 超出范围。

报错原因

100D是double类型,该类型精度为15-17位小数。当EF尝试将double值转换为decimal提交到数据库时,会保留double的完整精度,但数据库字段仅支持2位小数,导致参数值超出字段精度范围。

解决方法

1. 直接使用decimal类型赋值

将代码中的100D改为100M(M是VB中decimal类型的后缀),确保赋值类型与数据库字段完全匹配:

MyTable table = New MyTable With {
    .ID = Guid.NewGuid(),  
    .Amount = 100M
};

2. 显式转换double为decimal(若需保留double输入)

如果必须使用double类型的值,显式转换为decimal,必要时指定精度:

// 基础转换
.Amount = Convert.ToDecimal(100D)

// 确保保留2位小数,匹配数据库字段
.Amount = Math.Round(Convert.ToDecimal(100D), 2)

3. 验证EF实体类属性类型

检查EDMX生成的MyTable实体类中,Amount属性的类型是否为decimal。如果是double,右键EDMX文件选择从数据库更新模型,确保实体类型与数据库字段同步。

内容的提问来源于stack exchange,提问作者MojoDK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:15:05