我正在使用一个应用程序使用asp.net核心2.2
和efcore数据库
第一种方法与Oracle数据库
。我正在使用Oracle。EntityFrameworkCore(2.19.60)
nuget
包,成功映射db模型,但当我尝试从DBContext
获取数据时,得到错误
ORA-00904:“m”。“Id”:无效标识符
Oracle数据库版本:Oracle数据库12c标准版发布12.2.0.1.0-64bit生产
代码:
var fetched = await myDatabaseContext.MyTableVersions.ToListAsync();
LinQ正在生成以下查询:
SELECT "m"."Id", "m"."MAJORVERSION" FROM "MyTableVersions" "m"
由于这不是PL/Sql查询的正确语法,因此获得错误ORA-00904:"m"。"id":无效的标识符。
有没有办法修复这个错误?谢谢。
我在网上搜索了一下,发现
错误30352492-EFCORE:ORA-00904:无效标识符
但这个问题与模式有关。
若要避免区分大小写的问题,请添加消除EF的选项,以便向生成的查询添加引号。例如,如果您使用Devart Oracle提供商,则可以通过以下方式完成:
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpDbContextOptions>(options =>
{
var config = Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfig.Instance;
config.Workarounds.DisableQuoting = true;
...
}
}
如果您使用的是官方提供商-只需从Db命令拦截器
继承(在中的db命令中用空字符替换引号...执行
方法),将此拦截器添加到DbContextOptionsBuilder实例。
在Oracle世界中,双引号是应该避免的。
您的查询:
SELECT "m"."Id", "m"."MAJORVERSION" FROM "MyTableVersions" "m"
表示列名正好是Id
(大写I
,后跟d
)。只有这样,你才应该使用双引号。否则,只需删除它们:
SELECT m.id, m.MAJORVERSION FROM MyTableVersions m
表名也是如此——如果它是使用混合大小写创建的(如果没有双引号,就无法做到这一点),则必须始终使用双引号和完全相同的字母大小写。否则,不要使用它们。
Oracle对对象和列名不区分大小写,默认情况下为大写:
SQL> create table test (id number);
Table created.
SQL> desc test
Name Null? Type
----------------------------------------- -------- -----------------
ID NUMBER
SQL> select table_name, column_name
2 from user_tab_columns
3 where table_name = 'TEST';
TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------
TEST ID
SQL> insert into test (id) values (1);
1 row created.
SQL>
但是,如果使用带双引号的混合大小写,则始终使用它们:
SQL> create table "teST" ("Id" number);
Table created.
SQL> insert into test (id) values (1);
insert into test (id) values (1)
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> insert into "test" (id) values (1);
insert into "test" (id) values (1)
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> insert into "teST" (id) values (1);
insert into "teST" (id) values (1)
*
ERROR at line 1:
ORA-00904: "ID": invalid identifier
SQL> insert into "teST" ("Id") values (1);
1 row created.
SQL>
所以:首先确定表和列名到底是什么,然后适当地使用它们。
该查询完全有效(db)
CREATE TABLE "MyTableVersions"
("Id" NUMBER,
MAJORVERSION NUMBER)
然而,我怀疑你的桌子看起来像
CREATE TABLE "MyTableVersions"
(ID NUMBER,
MAJORVERSION NUMBER)
我不知道您试图获取的类是什么样子的,但我怀疑它有一个名为Id
的字段。如果您可以将该字段的名称更改为ID
(换句话说,使其大小写与相关数据库列的大小写匹配),那么您可能会发现它可以工作。
Oracle 11g Express Edition..创建表时出错 ORA-00904:无效标识符
我已经在虚拟XP中安装了Oracle 10g,并使用 并且成功地创建了表。但是当我试图通过简单的查询获取值时,如 我得到的错误就像 ORA-00904:"bbb":无效标识符 我不能理解我在这里做错了什么。
创建此表后,我正在尝试添加外键 我想使用Alter table创建的外键是Sailnumber: ALTER表成员添加外键(sailnumber)引用船(sailnumber) sailnumber是table boat的主键,如下所示 然而,我得到了这个错误SQL错误: ORA-00904:"SAILNUMBER":无效的标识符,我不知道为什么我得到有人能告诉我哪里出错了吗?
我正在尝试使用此查询创建一个表(customer)到数据库, 我得到以下回复: 错误报告-SQL错误:ORA-00904::标识符00904无效。00000-%s:无效标识符
有人能帮我找出为什么这段代码返回一个SQLOracle ORA-00904:无效的索引符错误吗?查询在没有Country='阿根廷'的情况下有效,但我需要按此值向下过滤。有人能给我指出正确的方向吗?
我写以下查询作为源在我的ADF。我得到以下错误: 错误[42S22][Microsoft][ODBC Oracle Wire Protocol driver][Oracle]ORA-00904::标识符无效 需要找出错误在哪里吗?