全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

EF Core怎么处理decimal精度 EF Core HasPrecision配置方法

EF Core中decimal精度配置首选HasPrecision方法,在OnModelCreating中显式调用并确保base.OnModelCreating最后执行;可辅以自定义特性批量标记,或全局配置Properties(),但需注意迁移更新与优先级冲突。

EF Core 默认把 decimal 映射为数据库的 decimal(18,2),这在多数财务场景下不够用——比如需要保留3位小数(如重量、利率),或总位数超18(如大额交易金额)。关键不是“能不能设”,而是“在哪设、怎么设才稳定生效”。

直接用 HasPrecision 配置单个字段

这是最常用也最可靠的方式,必须在 OnModelCreating 中显式调用,并确保 base.OnModelCreating(modelBuilder) 在最后执行:

  • HasPrecision(precision, scale) 是语义级配置,EF Core 会据此生成对应数据库类型(如 SQL Server 的 decimal(10,3)
  • 不要和 HasColumnType("decimal(10,3)") 混用,后者是硬编码字符串,绕过 EF 的类型推导,容易与迁移冲突
  • 示例:modelBuilder.Entity().Property(x => x.TaxAmount).HasPrecision(12, 4);

用自定义特性统一标记 decimal 字段

适合中大型项目,避免在 OnModelCreating 里逐个写重复代码。先定义特性:

[AttributeUsage(AttributeTargets.Property)]
public class DecimalPrecisionAttribute : Attribute
{
    public byte Precision { get; }
    public byte Scale { get; }
    public DecimalPrecisionAttribute(byte precision = 18, byte scale = 2)
    {
        Precision = precision;
        Scale = scale;
    }
}

然后在实体属性上使用:

[DecimalPrecision(10, 2)]
public decimal UnitPrice { get; set; }

再在 OnModelCreating 中批量扫描并应用:

  • 遍历所有实体类型 → 找出带该特性的 decimal 属性 → 调用 HasPrecision
  • 注意:必须在 base.OnModelCreating 之前完成扫描和配置,否则会被覆盖

全局修改所有 decimal 的默认精度(慎用)

EF Core 6+ 支持按类型批量配置:

modelBuilder.Properties()
    .Configure(c => c.HasPrecision(10, 2));

这个写法会作用于**所有未被单独配置过的 decimal 属性**,包括导航属性中的 decimal(如有)。优点是省事,缺点是灵活性差——比如你有一个 Rate 字段需要 (5,4),就得额外再单独覆盖一次。

常见失效原因和避坑点

很多“配置不生效”其实不是代码问题,而是环境或操作细节没到位:

  • 没运行 dotnet ef migrations add xxx 重新生成迁移脚本 —— 配置只影响新迁移,不会自动修正已有表结构
  • SQL Server 中已存在的列类型是 decimal(18,2),但迁移没包含 AlterColumn 操作 → 检查迁移文件里是否有对应变更
  • 用了 [Column(TypeName = "decimal(10,2)")] 但没生效 → 这个特性在较新 EF Core 版本中已被弱化,优先级低于 Fluent API,建议弃用
  • 前端传入 3 位小数但存进库只剩 2 位 → 先确认数据库列实际类型(用 SSMS 查看表定义),再确认 EF 是否真生成了带 scale 的迁移

基本上就这些。核心逻辑很清晰:HasPrecision 是推荐入口,特性用于组织,全局配置仅作兜底。只要迁移跟得上、类型对得准,decimal 精度就不会丢。


# 前端  # 编码  # sql  # 字符串  # Property  # column  # 数据库  # 自定义  # 这是  # 如有  # 已有  # 已被  # 遍历  # 你有  # 用了  # 就得  # 这在 


相关文章: 焦点电影公司作品,电影焦点结局是什么?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  个人网站制作流程图片大全,个人网站如何注销?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何获取上海专业网站定制建站电话?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  详解jQuery停止动画——stop()方法的使用  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何在Windows环境下新建FTP站点并设置权限?  如何批量查询域名的建站时间记录?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  西安专业网站制作公司有哪些,陕西省建行官方网站?  建站之星伪静态规则如何正确配置?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星安装模板失败:服务器环境不兼容?  如何撰写建站申请书?关键要点有哪些?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在万网ECS上快速搭建专属网站?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  建站168自助建站系统:快速模板定制与SEO优化指南  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何选择香港主机高效搭建外贸独立站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  青岛网站建设如何选择本地服务器?  如何在腾讯云服务器上快速搭建个人网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何快速上传自定义模板至建站之星?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  官网网站制作腾讯审核要多久,联想路由器newifi官网  建站之星上传入口如何快速找到?  c# 服务器GC和工作站GC的区别和设置  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  网站制作公司排行榜,抖音怎样做个人官方网站  建站之星后台管理:高效配置与模板优化提升用户体验  网站制作企业,网站的banner和导航栏是指什么?  如何在IIS管理器中快速创建并配置网站?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。