dotConnect: CROSS APPLY is not supported by Oracle Database

本文关键字:supported by Oracle Database not is CROSS APPLY dotConnect | 更新日期: 2023-09-27 18:07:56

我正在尝试使用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: CROSS APPLY在Oracle 11g及以下版本不支持。正确运行此LINQ语句需要Oracle 12c或更高版本。如果您需要在Oracle数据库11g或更低版本上运行此语句,请重写它,以便它可以转换为SQL,由您使用的Oracle版本支持。

我用:dotConnect for Oracle 8.4.171.0 + EF6.1 (Code-First) + Oracle 11g

dotConnect for Oracle 7.5.164.0 + EF4 (Code-First) + Oracle 11g

dotConnect: CROSS APPLY is not supported by Oracle Database

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

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