【问题标题】:ORA-00904 Linq generates error in SQL query for OracleORA-00904 Linq 在 Oracle 的 SQL 查询中生成错误
【发布时间】: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。谢谢

标签: c# oracle linq entity-framework-core ora-00904


【解决方案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

会的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多