0

我正在尝试使用 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

4

1 回答 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/

于 2014-06-13T10:31:22.597 回答