我正在使用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。
为什么会出现此错误?如何避免这个错误?有可能吗?
答案 0 :(得分:3)
如果此错误来自MySQL,则会发生以下两种情况之一:
如果此错误来自您的MySQL EF提供程序,则会发生以下两种情况之一:
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。