【问题标题】:dotConnect: CROSS APPLY is not supported by Oracle Database 11gdotConnect:Oracle 数据库 11g 不支持 CROSS APPLY
【发布时间】:2014-06-13 18:31:22
【问题描述】:

我正在尝试使用 devart dotConnect 8.4 + EF6.1 执行此代码块:

var menus = (from m in dbSet
             from p in m.RegraAcesso.Perfis
             from u in p.Usuarios
             where u.Id == userId && m.Pai.RegraAcesso.Token.Equals(module)
             select m)
            .Include(p => p.Pai)
            .ToList();

但是它会抛出这个错误:

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NotSupportedException: Oracle 数据库 11g 及更低版本不支持 CROSS APPLY。正确运行此 LINQ 语句需要 Oracle 12c 或更高版本。如果您需要在 Oracle 数据库 11g 或更低版本上运行此语句,请将其重写,以便可以将其转换为 SQL,并由您使用的 Oracle 版本支持。

我正在使用: dotConnect for Oracle 8.4.171.0 + EF6.1(代码优先)+ Oracle 11g

它与 dotConnect for Oracle 7.5.164.0 + EF4(代码优先)+ Oracle 11g

一起工作

【问题讨论】:

    标签: c# oracle11g ef-code-first dotconnect entity-framework-6.1


    【解决方案1】:

    Oracle 服务器从 12c 版本开始支持 OUTER APPLY/CROSS APPLY 结构。如果可能,我们在 dotConnect for Oracle 中的实现会避免生成 OUTER APPLY/CROSS APPLY,但是如果不使用 OUTER APPLY/CROSS APPLY,则无法翻译某些 LINQ 查询。在这种情况下,您应该重写您的 LINQ 语句。

    此外,随着实体框架引擎的发展,可能会开始生成 OUTER APPLY/CROSS APPLY 构造,在这些情况下,之前没有生成。因此,我们还建议您创建一个小型测试项目并联系 CodePlex 支持:https://entityframework.codeplex.com/

    【讨论】:

    • 我重写了我的查询,它现在正在工作。但是由于关系,我无法在初始 LINQ 语句中没有多个 from 的情况下在单个查询中执行此操作。感谢您的支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-07-24
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多