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