【问题标题】:Creating table on Oracle Db by Entity Framework 6 effect table name string format通过Entity Framework 6在Oracle Db上创建表效果表名字符串格式
【发布时间】:2016-02-03 14:21:21
【问题描述】:

我不确定这个问题的标题是什么,但我遇到了奇怪的问题。我通过使用提供程序 Oracle.ManagedDataAccess 在 Oracle DB 12c 上使用 EF 6 和 Code First Approach。我的实体类是由它们在 Db 上的默认名称创建的。例如,User => UsersRole => Roles。当我尝试在 PL/SQL Developer 工具(如

)上查询表时
select * from Users t

会有类似的错误

ORA-00942: table or view does not exist

偶数表已满。它的意思是“没有表或视图”。在尝试了很多方法后,我发现如果我像这样查询

select * from "Users" t

我现在可以访问数据了。所以问题是“为什么会发生?”,“这会产生什么影响?”

【问题讨论】:

    标签: ef-code-first entity-framework-6 plsqldeveloper oracle12c


    【解决方案1】:

    这是由于 Oracle 命名规则。 SQL是不区分大小写的语言,所以写的时候

    select * from Users
    

    Oracle 将其理解为

    select * from USERS
    

    但同时,Oracle 允许您创建具有不寻常名称的表,这些表必须在 qoute 标记内。要查询此表,您需要将其名称写入create table 语句中。这是 SQL*Plus 的脚本:

    SQL> create table "My Table with WEIRD Name" (id number);
    
    Table created.
    
    SQL> select * from "My Table with WEIRD Name";
    
    no rows selected
    

    这样的名称是区分大小写的,而且,我可以猜到,Entity Framework 会创建这样的名称。名称 USERS"USERS" 是等价的,名称 USERS"Users" - 不是。这就是为什么您的查询作为

    select * from "Users"
    

    更多信息在documentation

    【讨论】:

    • 这是我与 Oracle 合作的第一个项目。我认为这将是实体框架代码优先,但现在我知道发生了什么。关于 EF 正在为 Oracle Db 创建不寻常的名称,您是对的。我还意识到 Visual Studio Server Explorer 使用 qoute 标记内的表名查询 Oracle。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2014-03-10
    • 2022-10-25
    相关资源
    最近更新 更多