.NET 6升级后保存Decimal值遇OverflowException问题求助
解决.NET 6中EF Core保存Decimal时的OverflowException问题
针对升级到.NET 6后,保存整数部分为10位的Decimal值(如1234567890.12345)到数据库DECIMAL(35,17)列时出现的OverflowException: Conversion overflows错误,可通过以下步骤解决:
显式配置实体属性的精度与小数位数
.NET 6中EF Core对Decimal类型的映射校验更严格,默认配置可能无法匹配数据库的DECIMAL(35,17)规格,需手动指定:- 使用Fluent API(在DbContext的
OnModelCreating方法中):protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<目标实体类>() .Property(e => e.Value) .HasPrecision(35, 17); } - 使用数据注解:
[Column(TypeName = "decimal(35,17)")] public decimal Value { get; set; }
- 使用Fluent API(在DbContext的
排查中间类型转换操作
检查业务逻辑中是否存在将该Decimal值临时转换为整数类型(如int、long)再转回的操作,这类转换会因数值超出整数范围导致溢出,需直接保留Decimal类型进行处理。确认数据库驱动适配性
确保使用的数据库驱动版本完全适配.NET 6,部分旧版本驱动可能在Decimal类型映射上存在兼容性问题,建议更新到最新稳定版。
内容的提问来源于stack exchange,提问作者Geethan Regunathan
相关产品推荐
相关产品推荐

