如果此错误来自 MySQL,则发生以下两种情况之一:
- 您没有正确配置提供程序。
- 您的 EF 提供程序中存在错误。
如果此错误来自您的 MySQL EF 提供程序,则发生以下两种情况之一:
- 您没有正确配置提供程序。
- 您的 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 节点。