【问题标题】:Invalid query generated for Oracle database为 Oracle 数据库生成的查询无效
【发布时间】:2015-09-24 15:47:00
【问题描述】:

我正在使用 Entity Framework 5 并首先为数据库建模和映射编写代码。当我尝试通过 API 调用执行查询时,我收到一条错误消息,指出 ORA-00942: table or view does not exist。查看查询,它的格式似乎不是 Oracle 查询的典型格式。

我的 .config 连接字符串是

<connectionStrings>
  <add name="Entities" connectionString="Data Source=development;
                                         User ID=user;Password=password"
                       providerName="Oracle.DataAccess.Client" />
</connectionStrings>

在 OnModelCreating() 中我映射如下

modelBuilder.Entity<Job>().ToTable("Table1", "schema");

我可以在调试器中看到的正在生成的查询不会通过复制/粘贴到 Oracle 来执行。

SELECT "Extent1"."ColumnName" AS "ColumnName"
FROM "schema"."Table1" "Extent1"

我原以为我正在使用Oracle.DataAccess.Client 提供程序这一事实可以适当地生成查询。如何说服 EF5 它应该以特定方式生成查询以与 Oracle 兼容?

【问题讨论】:

    标签: .net entity-framework oracle11g ef-code-first entity-framework-5


    【解决方案1】:

    查询本身是有效的,只是因为标识符名称用双引号括起来,所以名称区分大小写。

    由于您可能没有为您的表和架构名称定义特定的大小写,因此在 EF 中创建映射时您可能应该只将其大写(默认 Oracle 大小写):

    modelBuilder.Entity<Job>().ToTable("TABLE1", "SCHEMA"); // upper case.
    

    【讨论】:

    • 我从未考虑或意识到区分大小写会导致 Oracle 出现问题?
    • 我们通常不需要关心。但是 EF 通过生成双引号中的名称来强迫您关心。不确定是否有办法告诉 EF 不要这样做。
    • 我通过 SE 发现了一个名为 Dapper.FluentMap 的映射器扩展,它似乎提供了一些这样的功能。 github.com/henkmollema/Dapper-FluentMap
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多