我有一个使用 EF 5.0(代码优先)的 MVC Web 应用程序,它使用此连接字符串连接到本地数据库(在同一台服务器上):
"Data Source={server}\{instance};Database={database};user id=sa;password={password}"
首次初始化 DbContext 时会删除并重新创建数据库。之后,它会引发以下异常:
System.Data.ProviderIncompatibleException:从数据库获取提供者信息时出错。这可能是由 Entity Framework 使用不正确的连接字符串引起的。检查内部异常以获取详细信息并确保连接字符串正确。---> System.Data.ProviderIncompatibleException:提供程序未返回 ProviderManifestToken 字符串。---> System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)
我在同一台服务器上托管了另一个应用程序,使用完全相同的连接字符串来访问数据库,使用老式 ADO.Net 方式中的 SqlConnection 对象连接良好。
我检查了类似的帖子,并且都提出了一些我尝试过但没有解决问题的事情:
- 为服务器实例添加 TCP/IP 别名
- 检查防火墙是否允许通过 TCP:1433 和 UDP:1434 端口的入站连接
- 检查服务器上是否正在运行 SQL Server Browser
- 检查连接字符串是否有效以及指定用户是否有权访问 SQL Server 实例
只是给整个事情添加一个奇怪的转折:我可以从运行 IIS Express 的工作站连接到同一服务器上的同一数据库,但是一旦它托管在服务器上,我就会遇到上述问题。