MySQL不支持OUTER APPLY

时间:2010-02-25 11:37:53

标签: mysql entity-framework devart

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

var foobar = ctx.ArticleBase.OfType<ActicleSpecial>().Include("CreatedBy.Image.Location").ToList();

错误:“MySQL不支持外部应用程序”我也在一个不同的查询中得到“MySQL不支持交叉应用程序”。

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

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

为什么会出现此错误?如何避免这个错误?有可能吗?

2 个答案:

答案 0 :(得分:3)

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

  1. 您尚未正确配置提供程序。
  2. 您的EF提供商中存在错误。
  3. 如果此错误来自您的MySQL EF提供程序,则会发生以下两种情况之一:

    1. 您尚未正确配置提供程序。
    2. 您的EF提供商有限制。
    3. SQL由提供程序生成。您可以通过ProviderManifestToken attribute in EDMX配置特定于服务器版本的SQL生成。这就是告诉提供者不要使用旧服务器版本不支持的SQL功能的方法。

      某些MySQL存储引擎可能支持其他人没有的SQL功能。在这种情况下,提供商需要使用大多数引擎支持的公共功能子集,或使用ProviderManifestToken来允许您选择。

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

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

答案 1 :(得分:3)

这是一个Entity Framework内部架构功能。有时它会生成SQL Server以外的提供程序不支持的查询。有关详细信息,请here at MSDN