使用 Code First EF 6.4.4 的第一个应用程序:SQL 服务器连接错误

First Application using Code First EF 6.4.4 : SQL Server Connection error

我刚开始学习 EF(非核心)并正在创建我的第一个代码优先应用程序。这是一个 C# 控制台应用程序,我所做的只是添加一个迁移,然后简单地创建示例数据库(与我的解决方案同名)。当我尝试 运行 Update-Database 时,出现此错误:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.)

我搜索并实施但仍无法解决此问题的步骤是:

  1. 我在 SQL 服务器配置管理器
  2. 中启用了 TCP/IP 端口
  3. 确保所有服务 运行ning(浏览器,SQL 服务器)
  4. 在 Windows Defender Firewall
  5. 中添加了一个例外
  6. 选中复选框以允许“远程连接”

我的连接字符串是:

<add name="ConsoleDBContext" 
     connectionString="Data Source=(LocalDb)\SQLEXPRESS;Initial Catalog=CodeFirst_Demo;Integrated Security=SSPI;" 
     providerName="System.Data.SqlClient" />

也尝试删除“localDB”但无济于事。

使用程序包管理器控制台的 C# 代码中遵循的步骤是:

  1. 安装包EntityFramework
  2. 启用迁移
  3. 添加迁移 CreatePost
  4. 更新数据库

我将非常感谢这方面的任何帮助。

您的程序无法访问您的服务器。如果您 运行 数据库在同一台机器上,那么您的连接字符串应该如下所示:

Data Source=.;Initial Catalog=<DB-Name>;User Id=<username>; Password=<pwd>;

数据源是服务器的名称,“.”表示本地主机或 127.0.0.1 Initial Catalog 是您的数据库名称,有时您可能会使用 master。 并且您不需要在同一台机器上配置 TCP/IP,除非您在其他机器上托管数据库,那么数据源应该是 db-machinname\db-instance-name,如果实例名称是默认名称,那么您只需指定机器名称。

您的连接字符串中的 server/instance 名称 很奇怪....

要么你的机器上安装了“完整的”SQL Server Express——当Windows启动并作为后台服务 - 在这种情况下,您应该使用 .\SQLEXPRESS(local)\SQLEXPRESS 作为您的 server/instance 名称:

<add name="ConsoleDBContext" 
     connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=CodeFirst_Demo;Integrated Security=SSPI;" 
     providerName="System.Data.SqlClient" />

或者,当你安装了 SQL Server Express LocalDB(安装时 Visual Studio ),那么您应该使用 (localdb)\MSSQLLocalDB 作为您的 server/instance 名称:

<add name="ConsoleDBContext" 
     connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=CodeFirst_Demo;Integrated Security=SSPI;" 
     providerName="System.Data.SqlClient" />

您现在使用的组合显然不正确 - 试试这两种组合中的一种,看看是否有效。

谢谢大家!通过在“Update-Database”命令中显式输入启动项目名称(在我的例子中是“CodeFirst_Demo”),我的问题得到了解决。像下面这样:

update-database -StartupProjectName CodeFirst_Demo