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

使用EF Core查询Oracle 11g时遇ORA-00933错误的求助

解决Oracle 11g+EF Core 7关键字列名查询报错问题

问题原因

INT是Oracle的保留关键字,直接引用会触发语法错误;手动添加双引号时,EF Core的Oracle驱动会对引号进行二次转义,生成""INT""这样的无效标识符,导致ORA-01741错误。

解决方案

1. 匹配驱动版本

确保使用的Oracle.EntityFrameworkCore版本与EF Core 7.x完全匹配(例如安装Oracle.EntityFrameworkCore 7.21.x版本),版本不兼容会引发各类解析问题。

2. 启用带引号标识符全局配置

在DbContext的配置中开启Oracle的带引号标识符支持,让EF Core自动为关键字列添加正确的双引号:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseOracle("你的数据库连接字符串", 
        oracleOptions => oracleOptions.UseQuotedIdentifiers());
}

3. 正确配置实体列映射

无需手动添加双引号,直接在ModelBuilder中指定列名即可:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<你的实体类>()
        .Property(e => e.Id)
        .HasColumnName("INT")
        .HasColumnType("NUMBER"); // 可显式指定列类型,避免映射错误
}

4. 备选方案:连接字符串参数

也可在连接字符串中直接加入QuoteIdentifier=true参数,替代上述的UseQuotedIdentifiers()配置:

Data Source=你的数据源;User Id=用户名;Password=密码;QuoteIdentifier=true;

5. 验证生成的SQL

若问题仍存在,可开启EF Core日志查看生成的SQL语句,确认列名是否被正确转义:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information);
    // 其他配置...
}

正常生成的SQL中,列名应显示为"INT"而非INT或""INT""。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:14:52