MySQL不支持OUTER APPLY

Pet*_*nar 5 mysql entity-framework devart

我正在使用MySQL的Entity Framework.以下查询会导致错误:

var foobar = ctx.ArticleBase.OfType<ActicleSpecial>().Include("CreatedBy.Image.Location").ToList();
Run Code Online (Sandbox Code Playgroud)

错误:"MySQL不支持外部应用"我也在一个不同的查询中得到"MySQL不支持交叉应用".

我有以下数据模型: alt text http://i48.tinypic.com/5x4kdc.jpg

除了Image实体有Location实体(一对多关系)命名的Location关系,UserBase有Image关系而不是UserSpecial.

为什么我会收到此错误?如何避免这个错误?可能吗?

Cra*_*ntz 3

如果此错误来自 MySQL,则发生了以下两种情况之一:

  1. 您尚未正确配置提供程序。
  2. 您的 EF 提供程序存在错误。

如果此错误来自您的 MySQL EF 提供程序,则发生了以下两种情况之一:

  1. 您尚未正确配置提供程序。
  2. 您的 EF 提供商存在限制。

SQL 由提供者生成。您可以通过EDMX 中的 ProviderManifestToken 属性配置服务器版本特定的 SQL 生成。这是您告诉提供商不要使用旧服务器版本不支持的 SQL 功能的方式。

某些 MySQL 存储引擎可能支持 SQL 功能,而其他引擎则不支持。在这种情况下,提供商需要使用大多数引擎支持的通用功能子集,或者使用ProviderManifestToken以允许您选择。

但是,有缺陷的提供程序也可能只是返回不正确的 SQL。如果是这种情况,那么您必须找到更新或避免触及该错误的查询。

更新:根据@Devart的回答,这似乎是提供商的限制,它是由于MySQL的限制而设计的。EF 将生成 ADO.NET 规范命令树。提供商有责任将其转换为 SQL。如果 EF 在 CCT 中返回一个跨/外部应用节点,那么 Devart 似乎还没有找到一种方法将其转换为 MySQL 可以处理的 SQL。因此,要么 MySQL 无法胜任支持所有 EF 查询的任务,要么 MySQL 专家(不是我!)需要向 Devart 展示如何生成与 MySQL 兼容的 SQL,该 SQL 可以正确返回交叉/外部应用的行CCT 节点。

  • 引用如下:“在某些情况下,查询管道可能会生成包含 CROSS APPLY 和/或 OUTER APPLY 运算符的 Transact-SQL 语句。因为某些后端提供程序(包括早于 SQL Server 2005 的 SQL Server 版本)不支持这些运营商,此类查询无法在这些后端提供商上执行。” 这就是彼得的例子。我们就这个问题联系了微软,得到的答案是否定的——这个功能不会改变。 (2认同)