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

EF Core Db First模式下Oracle Number(5)字段映射Int16引发数值溢出错误的解决求助

EF Core Db First模式下Oracle Number(5)字段映射Int16引发数值溢出错误的解决求助

各位好,我最近在开发一个基于.NET 5的Web应用,数据库用的是Oracle 12,通过Oracle.EntityFrameworkCore v5.21以Db First的方式生成实体类。现在遇到了一个数值溢出的问题,折腾了好久没解决,想请教下大家。

我的问题详情如下:

  • 数据库里的Personnel表(对应之前提到的TableA)中,IdNum字段类型是Number(5),但这个字段实际存储的数值范围在95000到96000之间
  • EF Core自动生成实体时,把IdNum字段映射成了short(即Int16)类型,而short的最大值只有32767,所以查询数据时直接抛出错误:
    Value was either too large or too small for an Int16
    
  • 因为每次scaffolding都会重新生成PortalDbContext类,所以我单独创建了MyPortalDbContext.cs文件,通过部分类扩展PortalDbContext的OnModelCreatingPartial方法来手动配置字段映射,尝试了两种方案但都没效果:

第一种方案,直接在partial方法里配置属性:

public partial class PortalDbContext
{
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Personnel>()
            .Property(e => e.IdNum)
            .HasColumnType("NUMBER(5)")
            .HasConversion<int>();
    }
}

第二种方案,使用IEntityTypeConfiguration进行配置:

public partial class PortalDbContext
{
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new PersonnelConfiguration());
    }
}

public class PersonnelConfiguration : IEntityTypeConfiguration<Personnel>
{
    public void Configure(EntityTypeBuilder<Personnel> builder)
    {
        builder.Property(e => e.IdNum)
            .HasColumnType("NUMBER(5)")
            .HasConversion<int>();
    }
}

我现在的需求是:即使数据库字段是Number(5),实体里的IdNum也能被映射成int或者decimal类型,这样就能容纳95000-96000的数值了,而且我没办法修改数据库的字段类型。

请问有没有什么有效的解决办法?

备注:内容来源于stack exchange,提问作者ilhank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:53:08