“MetadataException,指定的Schema无效”

时间:2014-02-27 13:05:43

标签: c# mysql entity-framework

在这里遇到问题,我正在尝试查询数据库,当我从该查询中选择某些内容时,我收到此错误

  

指定的架构无效。错误:

     

Models.Context.AdaptEntities.ssdl(2,58):错误0172:所有SSDL   工件必须以同一提供商为目标。提供者   'MySql.Data.MySqlClient'与'MySql.Data.MySqlClient'不同   那是早先遇到的。

     

Models.Context.AdaptEntities.ssdl(2,91):错误0169:所有SSDL   工件必须以同一提供商为目标。 ProviderManifestToken   '2008'与之前遇到的'5.6'不同。

     

Models.Context.Unitemps.ssdl(2,54):错误0172:所有SSDL工件   必须针对同一个提供商。提供者'MySql.Data.MySqlClient'   与遇到的'MySql.Data.MySqlClient'不同   早。

     

Models.Context.Unitemps.ssdl(2,87):错误0169:所有SSDL工件   必须针对同一个提供商。 ProviderManifestToken'2008'是   不同于之前遇到的'5.6'。

任何人都知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

问题在于您没有针对正确版本的MySQL。

首先,根据存储模型(.ssdl)文件中Schema元素的ProviderManifestToken属性中指定的MySQL版本,检查Transact-SQL查询的Entity Framework目标。 / p>

此版本可能与您所连接的实际MySQL的版本不同。

这是Entity Framework的一个已知问题... Taken from here

“某些数据库行为取决于为数据库设置的兼容级别。如果您的ProviderManifestToken属性设置为2005并且您的SQL Server版本是2005,但数据库的兼容级别设置为”80“(SQL Server 2000) ),生成的Transact-SQL将以SQL Server 2005为目标,但由于兼容级别设置,可能无法按预期执行。例如,如果ORDER BY列表中的列名与列中的列名匹配,则可能会丢失排序信息。选择器“。

作为解决方法:打开Entity Framework .edmx文件并手动更改ProviderManifestToken。编译后,应该更改ssdl文件中指定的清单标记(用于脱机)。