提供程序未返回ProviderManifestToken字符串错误。

19

我正在尝试使用ASP.Net MVC3、Entity Framework和MySQL创建Web应用程序。

我已经将以下代码添加到我的Web.Config文件中。

<connectionStrings>
    <add name="ContactContext" connectionString="server=localhost;database=contacts;uid=root;pwd=password;" providerName="MySql.Data.MySqlClient"/>

  </connectionStrings>
我在项目"Contact_Me"中创建了"Person"模型和"ContactContext"。当我尝试创建一个包括Person模型和Contact上下文的"ContactController"时,它会给我以下错误提示:
"Unable to retrieve metadata for "Connect_Me.Models.Persons". The provider did not return a ProviderManifestToken string" MYSQ & MVC3 SQL connection error \ ProviderManifestToken but I am using MySQL这个问题最接近我的情况,但是答案没有解决我的问题。
提前感谢。

你能发完整的异常信息吗?我之前遇到过这个MySQL错误,但需要看看是否相同。还有堆栈跟踪。 - Xharze
这只是我在填写创建联系人控制器表单后单击“确定”按钮时收到的错误消息。 - Harshani
请检查是否将connectingString添加到了正确的Web.config文件中。它应该位于根配置文件中(而不是在Views / Web.config中)。 - user1585746
我收到了这个错误,是因为我迁移到了一个新的虚拟机,并使用了我的源代码的全新副本,但我忘记运行Update-DataBase来将我的EF6数据库部署到本地数据库服务器。例如,我的数据库不存在。 - Ryan Mann
8个回答

23

我知道对于一些人来说,这可能非常基础,但是在EF无法定位要使用的连接字符串的情况下,也会引发此异常。 如果您正在使用多层应用程序,请确保将连接字符串添加到客户端应用程序中,而不是包含数据访问代码的类库中。 仅供参考。


1
我在使用EF Power Tools Reverse Engineer(Code First)时遇到了错误,你的答案非常准确。我已经在EF PowerTools中指定了连接,但是在目标应用程序的web.config中缺少了它。感谢您的帮助! - hardba11
在我的情况下,确切的原因。谢谢,user1843594! - Tomas Walek
一个格式错误的连接字符串也会导致这个问题。由于我的连接字符串中有两次端口号(例如:“server.com:3306:3306”),因此出现了这个错误。 - dlchambers

10

当我的SQL服务器实际上处于宕机状态时,我遇到了这个错误。因此,请确保您的SQL服务器正在运行。


5

非常感谢,这正是我的问题所在,现在已经解决了。 - sushil suthar
我因为这个答案而爱你!非常感谢你。 - Jules
我花了很长时间才弄清楚这个问题。很高兴你们发现它有用! - Tim Cooke

3
问题出在MySQL连接器/Net上。
我之前使用的是MySQL连接器/Net 6.3.5,在卸载它并安装MySQL连接器/Net 6.5.4后问题得以解决。你可以在http://www.mysql.com/products/connector/找到最新的连接器。

2
有时候这个问题是由sslmode引起的。对我来说,解决方法是在连接字符串中添加sslmode=None。
我需要对我的连接字符串进行小改动:
<add name="Connection" connectionString="Server=SOMEHOST;Database=DB;Uid=USR1;Pwd=PASS1;" providerName="MySql.Data.MySqlClient" />

to

<add name="Connection" connectionString="Server=SOMEHOST;Database=DB;Uid=USR1;Pwd=PASS1;sslmode=None;" providerName="MySql.Data.MySqlClient" />

抱歉,必须添加sslmode=None; - Ajay Suwalka
这是我的情况。之前它可以正常工作。有一天,在您安装了带有SSL库的某些软件后,程序无法连接到mysql,而且没有任何关于SSL的信息。因为sslmode的默认值是preferred。 - Keep Thinking

1
尽管这个问题已经有答案了,但我也遇到了同样的问题。在我的情况下,问题出在连接字符串上;我使用了“Integrated Security”这一部分,而实际上我不应该使用它;我应该依赖于数据库身份验证。
我删除了“Integrated Security=True”这一部分,然后它就完美地工作了 :)

0
重新启动电脑对我有用。
在显示此消息时,我没有发现我的计算机[Windows 10]与测试服务器之间有任何差异,应用程序以相同的配置部署在那里并且正常工作,并且使用相同的数据库。这意味着问题可能与运行在测试服务器上的数据库无关。
值得一提的是,在重新启动时有一些待处理的Windows更新。

-1
也许错误在于您的连接字符串。您是否尝试使用上述登录信息连接到数据库实例?请尝试更改连接字符串。
connectionString="Data Source=.;Initial Catalog=contacts;Integrated Security=True uid=root;pwd=password;" providerName="MySql.Data.MySqlClient"/>

如果您正在使用SQL Server,请使用上面的代码。否则,如果您正在使用SQL Express,请使用下面的代码。

 connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=contacts;Integrated Security=True uid=root;pwd=password;" providerName="MySql.Data.MySqlClient"/>

我尝试登录到数据库实例,它运行良好。我认为问题也可能出在连接字符串上。你提供的解决方案也没有起作用。 - Harshani
在使用 MSSQL 时,您正在使用“MySQL”的 providerName。 - ilter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接