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 查询中生成错误的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00904: "CEILING": ORACLE 11G 中的标识符无效
ORA-00904 无效标识符 -- 动态 Oracle 函数
python调用oracle函数ORA-00904无效标识符
Oracle- 为啥在组合列中显示此错误“ORA-00904: "OUTLET_STATUS": invalid identifier"?