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

运行EntityFramework脚手架生成代码时遇ORA-00904无效标识符错误

解决EF脚手架生成代码引发的ORA-00904无效标识符错误

问题说明

运行Entity Framework脚手架生成的代码时,触发Oracle数据库异常:

Oracle.ManagedDataAccess.Client.OracleException : ORA-00904: "p0"."ModifiedByNavigationUuid": invalid identifier

经排查,问题根源是Entity Framework错误地将导航属性名称与关联对象的ID字段拼接,生成了数据库中不存在的列名ModifiedByNavigationUuid。

修复方案

  • 手动配置实体关系:在DbContext的OnModelCreating方法中,显式指定导航属性对应的外键,避免EF自动推断出错。示例代码:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<目标实体类>()
            .HasOne(e => e.ModifiedByNavigation) // 导航属性
            .WithMany()
            .HasForeignKey(e => e.ModifiedByUuid); // 数据库中实际存在的外键字段
    }
    
  • 清理冗余生成属性:检查脚手架生成的实体类,若存在自动生成的ModifiedByNavigationUuid这类冗余字段,直接删除,保留正确的外键字段(如ModifiedByUuid)和导航属性(如ModifiedByNavigation)。

  • 自定义命名约定:若项目频繁出现此类问题,可自定义EF的外键命名规则,避免自动拼接导航属性名称。示例:

    protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
    {
        configurationBuilder.Properties()
            .Where(p => p.Name.EndsWith("Uuid"))
            .HaveColumnName(p => p.Name); // 强制使用属性原名作为数据库列名
    }
    

验证方式

修复后重新运行代码,查看EF生成的SQL语句,确认不再出现ModifiedByNavigationUuid这类不存在的列名,确保SQL直接引用数据库中实际存在的外键列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:27:05