代码首次迁移中更新数据库命令出错

Error in update-database command in code first migration

我正在 WPF 中开发桌面应用程序,并使用 LocalDB 创建 SqlRepository 来存储数据。我正在使用以下工具

我已经使用 Microsoft SQL 服务器数据库文件 (SqlClient) 配置创建了本地数据库。数据库创建成功,下面是从 Sql

获取的连接字符串
Data Source=(LocalDB)\v11.0;Initial Catalog=D:\USERS\USERNAME\DOCUMENTS\TestDatabase\testdb.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False

我在 app.config 中使用相同的连接字符串。我可以在 Visual Studio 的 SQL 服务器数据库资源管理器中查看数据库对象。但是在 Nuget 包管理器控制台中运行 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: 26 - Error Locating Server/Instance Specified)

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: 26 - Error Locating Server/Instance Specified)

此错误消息通知您无法连接到 SQL Server。可能的原因及排除方法如下:

1) SQL 服务器未启动。启动它将允许您在可用 SQL 服务器的下拉列表中看到您的 SQL Server/instance。

  • 进入开始菜单 -> 控制面板 -> 管理工具 -> 服务。
  • 在服务列表中找到SQL服务器(实例名称,通过 默认为 EZPARTS5) 并检查其状态,它必须已启动
    (如果没有启动,那么右击SQL服务器和select
    从上下文菜单开始。

2) 防火墙阻止端口 1433(MSSQL 标准连接端口)。可以按照以下步骤禁用它:

  • 进入开始菜单 -> 控制面板 -> 管理工具 -> 服务。
  • 找到Firewall服务,必须禁用它(如果没有,那就对了 单击该服务并从上下文菜单中 select 停止)。

注意:有关这方面的更多信息,请访问 Microsoft 官方网站:Link

3) TCP/IP 协议对 MSSQL 协议禁用。要启用它,请参阅以下步骤:

  • 导航到“开始”菜单中的 SQL 服务器配置管理器。
  • 在 SQL 服务器配置中指定 TCP/IP 协议的设置 经理。
  • 重新启动计算机。

注意:有关这方面的更多信息,请访问 Microsoft 官方网站:Link

4) 确保您的数据库引擎配置为接受远程连接(如果您使用的是集中式数据库):

  • 打开 SQL Server Management Studio。
  • 右键单击 SQL 服务器实例 -> 属性 -> 连接 -> 选中允许远程连接到此服务器框。
  • 转到常规部分并检查在中指定的 SQL 服务器的名称 名称字段。

5) 如果您使用命名的 SQL 服务器实例,请确保您在连接字符串中使用该实例名称。通常需要指定数据库服务器的格式是machinename\instancename.

6) 请确保您的登录帐户对您在登录时使用的数据库具有访问权限。 选择: 如果您仍然无法建立任何连接,您可能需要在服务器上创建一个 SQL 帐户,在相关数据库上创建一个相应的 SQL 用户,然后使用此 username/password 登录连接到 SQL 服务器的数据。

引用自此link

尝试使用此连接字符串:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=D:\USERS\USERNAME\DOCUMENTS\TestDatabase\testdb.MDF;Initial Catalog=testdb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

我解决了这个错误,将初始项目更改为实体项目。

看:

更新数据库-详细 使用启动项目 'SCVE.Web'. <-- 这个 ir 错误 使用 NuGet 项目 'SCVE.EntityFramework'.

当我将 "start-up project" 从另一个模块更改为包含对解决方案中所有其他项目的引用的模块时,我遇到了类似的问题并修复了它。 右键单击模块 >> 单击 "Set as StartUp Project"

Diego 的回答是正确的。

当标记为启动项目的项目中没有连接字符串时会出现此问题。然后 EF 尝试连接到一些默认数据库引擎以执行更新。就我而言,它尝试使用 express,但由于某种原因无法连接。并抛出错误。

运行 您的 "update-database" 带有选项“-Verbose”。其中一行显示使用了哪个 StartUp 项目。检查此项目中的连接字符串,或将启动项目更改为具有正确连接字符串的项目。这解决了问题。

如其他答案中所述,问题通常来自包管理器控制台中的初始项目错误。 在我的例子中,控制台忽略了我在 Default Project 下拉列表中选择的值,以及 -StartUpProjectName 参数,并重现了尝试连接到某些默认数据库引擎的错误行为,正如 Mikk 的回答所描述的那样,在我的案例使用的是 SqlExpress 引擎。

我的问题是由错误的解决方案配置引起的:如果您的解决方案有多个项目并且打算 运行 使用配置选项 "Multiple startup projects",但您只是从源代码下载它控制存储库,则可能会将默认配置选项 "Single startup project" 应用于解决方案(此配置值通常未签入源代码控制)。在这种情况下,包管理器控制台只会忽略在其组合中选择的启动项目,只会应用解决方案中的默认启动项目,该项目可能没有连接字符串,如 Mikk 的回答中所指定。

所以我通过更改解决方案属性来修复它:Common properties / Startup project / Select Multiple startup projects 而不是 Single startup project,然后是包管理器控制台将接受项目名称并更新正确的数据库。

如果您尝试连接到 Sql 服务器而不是 localdb,请确保 web.config 文件中的默认连接工厂如下所示:

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="Data Source=.\SQLEXPRESS2012; Integrated Security=True; MultipleActiveResultSets=True" />
  </parameters>
 </defaultConnectionFactory>

我在新创建的 ASP.NET 项目中遇到了同样的问题。

首先我尝试按照上面的方法设置启动项目。没有启动项目 selected,我无法 select 一个。

最终我将 Visual Studio 从 2015 Update 1 更新到 2015 Update 3 和

update-database

执行没有问题。

我通过 adding parameters to the update-database command 解决了这个问题:

update-database -StartupProjectName MyApp.Web -ConnectionStringName MyAppConnectStringInWebConfig
PM>Update-Database

我今天在 4 小时内完成的错误和解决方案。 我在 .net 编码方面非常陌生,但是在 PHP 方面我有 10 多年的经验。 我花了 4 个小时才解决这个问题。 1.My first Mistake: 我本地的笔记本电脑上没有 Microsoft SQL Server 2019 我是通过 AZURE 安装的,这不适用于本地主机,所以我在下载后在本地安装了它,它花了很多时间2小时。 2.Second改错=

 "DevConnection": "Server=localhost;Database=PaymentDetailDB;Trusted_Connection=True;MultipleActiveResultSets=True;"

那对我有用