【问题标题】:"MetadataException, Schema specified is not valid"“MetadataException,指定的架构无效”
【发布时间】:2014-02-27 13:05:43
【问题描述】:

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

指定的架构无效。错误:

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' 不同。

有人知道解决方案吗?

【问题讨论】:

  • 如何在您的配置(可能是 web.config)文件中设置您的提供商?

标签: c# mysql entity-framework


【解决方案1】:

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

首先要检查 Transact-SQL 查询的实体框架目标是否基于存储模型 (.ssdl) 文件中 Schema 元素的 ProviderManifestToken 属性中指定的 MySQL 版本。

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

这是实体框架的一个已知问题...Taken from here

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

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

【讨论】:

  • 这个在 edmx 文件中的什么位置?
  • 实体框架项目中,需要通过windows explorer找到(在Visual Studio中不能编辑),ProviderManifestToken条目应该靠近顶部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
相关资源
最近更新 更多