dotConnect:Oracle Database 11g不支持CROSS APPLY

时间:2014-06-10 20:27:55

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

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

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

正在使用 dotConnect for Oracle 7.5.164.0 + EF4(代码优先)+ Oracle 11g

1 个答案:

答案 0 :(得分:1)

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

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