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.
为什么我会收到此错误?如何避免这个错误?可能吗?
如果此错误来自 MySQL,则发生了以下两种情况之一:
如果此错误来自您的 MySQL 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 节点。