ORA-00904 Linq 在 Oracle 的 SQL 查询中生成错误

Posted

技术标签:

【中文标题】ORA-00904 Linq 在 Oracle 的 SQL 查询中生成错误【英文标题】:ORA-00904 Linq generates error in SQL query for Oracle 【发布时间】:2020-08-09 17:45:19 【问题描述】:

我使用 EF Core for Oracle,并尝试从 DbContext 获取实体列表。

我有两个模型类:

public class CssKursyModel

    [Key]
    [Column("KW_ID")]
    public int Kw_Id  get; set; 

    public CssTabeleKursowModel CoursesTables  get; set; 

    [Column("KW_WAL_Z_ID")]
    public int Kw_Wal_Z_Id  get; set; 

    [Column("KW_WAL_NA_ID")]
    public int Kw_Wal_Na_Id  get; set; 

public class CssTabeleKursowModel

    [Key]
    [Column("TK_ID")]
    public int Tk_Id  get; set; 

    [Column("TK_SYMBOL")]
    public string Tk_Symbol  get; set; 

    [Column("TK_NAZWA")]
    public string Tk_Nazwa  get; set; 

但是当我尝试执行这个语句时

var t = context.CssCourses.ToList();

返回异常

ORA-00904: "s"."CoursesTablesTk_Id": 标识符无效

我可以做些什么来解决这种情况?

当我更改我的 CSSKursyModel 并添加 ForeignKey 属性时,像这样

 
        [Key]
        [Column("KW_ID")]
        public int Kw_Id  get; set; 

        [ForeignKey("TK_ID")]
        public CssTabeleKursowModel CoursesTables  get; set; 

        [Column("KW_WAL_Z_ID")]
        public int Kw_Wal_Z_Id  get; set; 

        [Column("KW_WAL_NA_ID")]
        public int Kw_Wal_Na_Id  get; set; 

并将方法更改为

var t = context.CssCourses
                        .Include(i => i.CoursesTables.Tk_Id)
                        .ToList();

错误信息看起来像 ORA-00904: "i"."TK_ID": 标识符无效

列名正确 (TK_ID),但执行仍因 ORA-00904 异常而结束

问候

【问题讨论】:

请编辑问题并显示表格 DDL。谢谢 【参考方案1】:

默认情况下,Oracle 以大写形式存储对象(和列)名称,除非您在创建时将这些名称括在双引号中。 Oracle 的人不这样做,所以 - 如果有人为你创建了表,我想他们是这样做的,即没有使用双引号。

在这种情况下,您可以使用任何您想要的字母大小写来引用列名。

这意味着你应该尝试使用"COURSESTABLESTK_ID"(如果那个 Linq 东西需要双引号;我不会说,所以我不能说)。否则,就 Oracle 本身而言,COURSESTABLESTK_ID(不带双引号)可以。


如果有人将表创建为,您的代码将起作用

create table some_table ("CoursesTablesTk_Id" number);

我认为实际上是,

create table some_table (CoursesTablesTk_Id number);

这意味着

select coursestablestk_id from some_table

select COURSEStablesTk_Id from some_table

select COURSESTABLESTK_ID from some_table

会的。

【讨论】:

以上是关于ORA-00904 Linq 在 Oracle 的 SQL 查询中生成错误的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE: ORA-00904: : 无效的标识符

ORA-00904: "CEILING": ORACLE 11G 中的标识符无效

ORA-00904 无效标识符 -- 动态 Oracle 函数

带有错误 ORA-00904 的 Oracle 更新语句

python调用oracle函数ORA-00904无效标识符

Oracle- 为啥在组合列中显示此错误“ORA-00904: "OUTLET_STATUS": invalid identifier"?