EF 代码优先 - 提供程序未返回 ProviderManifestToken 字符串

Posted

技术标签:

【中文标题】EF 代码优先 - 提供程序未返回 ProviderManifestToken 字符串【英文标题】:EF Code First - The Provider did not return a ProviderManifestToken string 【发布时间】:2011-09-16 14:16:05 【问题描述】:

我正在尝试运行一个非常简单的 EF Code First 示例,但遇到了上述问题。我已经听从了这里的建议(How to configure ProviderManifestToken for EF Code First)但无济于事。我终于设法让 EF 通过将实际连接字符串传递给 DBContext 而不是我定义的连接字符串名称来创建我的数据库和表。

这是我最初在 app.config 中由连接字符串定义的方式

<connectionStrings>
    <add name="ProductContext" 
         connectionString="integrated security=SSPI;
                           data source=MYMACHINE;
                           persist security info=False;
                           initial catalog=Product"
         providerName="System.Data.SqlClient" />
</connectionStrings>

名称“ProductContext”与 ProductContext 类匹配,并且数据库 Product 不存在。

按照上一个线程的建议,我将连接字符串名称传递给 ProductContext 和基本 DBContext cstor。这也不起作用。

最后,我传递了上面的连接字符串,一切正常,创建了数据库和表。

我使用的是 SQL Server 2008 和 EF 4.1。关于我做错了什么有什么想法吗?

谢谢,

更新

该应用程序是 WPF 应用程序,而不是 Web 应用程序。从 app.config 中删除连接字符串后,我得到了同样的异常:

“发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)”

【问题讨论】:

连接字符串是在你正在运行的项目的app.config中还是在库项目中? 它在主项目的 app.config 中,而不是库中。如何解决这个问题? 尝试将 app.config 添加到库项目并尝试共享主项目 app.config,但两种方法均无效。 它是一个网络应用程序吗? (那么连接字符串必须进入 web.config。)如果从配置文件中完全删除连接字符串会发生什么?您是否收到相同的错误消息或其他错误? 这是一个 WPF 应用程序。从 app.config 中删除连接字符串后,我得到了同样的异常。 [“与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定实例)" 【参考方案1】:

回答这个问题的问题在于,罪魁祸首可能不止一个问题。

也就是说,我有几件事需要检查:

    您的数据源名称似乎无效。您需要声明主机名和实例名。示例:.\SQLEXPRESS(注意 . 点)或 MyServerHostName\mysqlInstanceName

    使用 SQL Server Management Studio 验证您是否拥有有效的数据源并先在其中尝试。

    权限。您正在使用集成安全性,因此建立数据库连接的应用程序的安全上下文必须具有适当的权限。检查事项:

    使用 SQL Server Mgmt Studio,连接到您的数据库。在左窗格(对象资源管理器)中选择您的数据库--> 数据库--> 选择您的数据库--> 安全性--> 用户。确保您可以验证用于运行应用程序的帐户是否已被明确授予权限,或者可以通过成为组成员来继承这些权限。

当我遇到此错误时,我的问题证明是我将 Integrated Security=SSPI 与“用户名 =”和“密码 =”混合在一起......没有意识到我需要 Integrated Security=false;我的用户和密码参数被忽略了。

对此不确定:我确实阅读了一些人建议(至少用于故障排除)设置 Persist Security Info=true。

【讨论】:

【参考方案2】:

我在 EF6 VS 2013 上遇到了类似的问题,当我在实体框架 - 逆向工程代码优先 - 连接属性对话框中选择“保存密码”时,问题得到了解决。希望这对某人有所帮助。

【讨论】:

这就是解决方案。 很奇怪,但确实如此

以上是关于EF 代码优先 - 提供程序未返回 ProviderManifestToken 字符串的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1 异常“提供程序未返回 ProviderManifestToken 字符串”

代码优先会员提供者

使用带有 EF 6 Code First 的 Oracle MangedDataAccess “提供者没有返回 providermanifesttoken”

无法删除数据库,因为它正在使用中 + EF 代码优先

EF之Code First代码优先

实体框架代码的动态连接字符串首先在运行时 EF6(mssql、mysql、oracle)中用于多个数据库提供程序