代码优先迁移中update-database命令出现错误

24

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

  • 带有更新2的Visual Studio 2013 Community
  • Code First迁移的Entity Framework 6.1.2

我使用Microsoft SQL Server数据库文件(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 Server数据库资源管理器中,我可以查看数据库对象。但是当在NuGet包管理器控制台中运行update-database命令时,出现以下错误:

在与SQL Server建立连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问。请验证实例名称是否正确,并确认SQL Server已配置为允许远程连接。(提供程序: SQL Network Interfaces,错误: 26 - 找不到服务器/实例指定的错误)


应该是 Data Source=(local)\v11.0 或者 Data Source=.\v11.0。 - Hasani Blackwell
我的一个MVC项目在同一台机器上,数据源为(localDB)\v11.0,可以正常工作。但是该应用程序使用了Entity Framework 5.0。现在我正在使用6.1.2版本。 - Nps
你解决了吗?我也遇到了同样的问题 :( - Magnus Backeus
很遗憾,我已经转移到基于服务器的实例了。 - Nps
10个回答

67

我曾经遇到类似的问题,当我将“启动项目”从另一个模块更改为包含解决方案中所有其他项目引用的模块时,问题得以解决。 右键单击模块 >> 单击“设置为启动项目”


1
我刚在VS 2013中遇到了这个问题,很高兴我找到了这个答案,没有走下“逻辑”路线,首先按照6/7步骤指南开始调试我的网络设置!我认为这可能是OP正在寻找的答案;可惜它没有被标记为答案。 - lukkea
9
为什么?它有效,但为什么?!默认项目下拉菜单明明可以做到这一点 - 什么鬼... 叹气 - Robert MacLean
3
这个问题在VS2015中仍然存在。这个答案也可以解决它。(几个小时后) - sdanna
将DB(EF)项目的AppConfig中与连接字符串相关的部分复制到Web项目的Web Config中。这就是我在我的情况下所做的。 - Vaibhav
1
这个答案绝对证实了我是微软魔法王国中的爱丽丝!! - Hamed Zakery Miab

9

Diego的回答是正确的。

该问题在启动项目中没有连接字符串时出现。然后EF尝试连接到某个默认的数据库引擎进行更新。在我的情况下,它尝试使用express,但由于某些原因无法连接,然后抛出了错误。

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


虽然我已经在appsettings.json中设置了连接字符串,但仍然出现错误。使用“-Verbose”将使您能够找到它正在使用哪个服务器和哪个数据库连接来设置连接。直到那时,我才意识到还有许多其他的.yml和.json文件也存储了连接字符串(可能是通过缓存机制)。我找到并替换了所有连接字符串以使事情运行起来。 - Harish Ninge Gowda

3

3
如其他答案所解释的那样,这个问题通常来自于在包管理器控制台中选择了错误的初始项目。 在我的情况下,控制台忽略了我在默认项目下拉列表中选择的值,以及-StartUpProjectName参数,并复制尝试连接到某个默认数据库引擎的错误行为,正如Mikk所描述的,在我这种情况下是使用SqlExpress引擎。
我的问题是由于错误的解决方案配置造成的:如果您的解决方案有几个项目,并且意味着要使用“多重启动项目”配置选项运行它,但您只是从源代码控制存储库下载它,那么默认配置选项“单个启动项目”可能被应用于解决方案(此配置值通常不会在源代码控制中检入)。在这种情况下,包管理器控制台只忽略其组合框中选择的启动项目,并仅将默认启动项目应用于解决方案,该解决方案可能没有连接字符串,如Mikk所指定的那样。
因此,我通过更改解决方案属性来解决了它:公共属性 / 启动项目 / 选择多个启动项目而不是单个启动项目,之后包管理器控制台将接受项目名称并更新正确的数据库。

我尝试了很多不同的解决方案都没有成功,但是你的解决方案却行得通。谢谢! - Scott Greenfield

2
我解决了这个错误,将初始项目更改为实体项目。
看:
Update-Database -Verbose 使用启动项目 'SCVE.Web'。 <-- 这是错误 使用 NuGet 项目 'SCVE.EntityFramework'。

1
尝试使用此连接字符串:

Try with this Connectionstring:

<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>

1
如果您想连接到 Sql Server 而不是 localdb,请确保 web.config 文件中的默认连接工厂如下所示:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="Data Source=.\SQLEXPRESS2012; Integrated Security=True; MultipleActiveResultSets=True" />
  </parameters>
 </defaultConnectionFactory>

1
发生了与网络相关或特定实例的错误,当建立到 SQL Server 的连接时。服务器未被找到或无法访问。请验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。(提供程序: SQL Network Interfaces, 错误: 26 - 找不到服务器/实例指定的错误)
此错误消息通知您无法连接到 SQL Server。以下是可能的原因及其解决方法:
1) SQL Server 未启动。启动它将使您在可用 SQL Server 下拉列表中看到您的 SQL Server/实例。
- 转到“开始”菜单 -> “控制面板” -> “管理工具” -> “服务”。 - 在服务列表中查找 SQL Server (实例名称,默认情况下为 EZPARTS5),并检查其状态,必须为“已启动”(如果未启动,则右键单击 SQL Server 并从上下文菜单中选择“启动”)。
2) 防火墙阻止端口1433(MSSQL连接的标准端口)。可以按照以下步骤禁用它:
  • 打开开始菜单->控制面板->管理工具->服务。
  • 找到防火墙服务,必须被禁用(如果没有被禁用,则右键单击该服务并从上下文菜单中选择停止)。

注意:更多信息可以在官方 Microsoft 网站上找到:链接

3) MSSQL 协议的 TCP/IP 协议已被禁用。要启用它,请按照以下步骤:

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

注意:更多信息可以在官方 Microsoft 网站上找到:链接

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

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

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

6) 确保您的登录帐户对您在登录期间使用的数据库具有访问权限。 替代方案: 如果仍然无法获得任何连接,则可能需要在服务器上创建一个 SQL 帐户,在相关数据库上创建一个相应的 SQL 用户,并仅使用此用户名/密码登录数据来连接到 SQL Server。

引用自此 链接


我没有连接到任何远程服务器,而是使用本地机器上创建的localDB mdf文件。我可以在SQL Server对象资源管理器中看到实例,并且可以在Visual Studio中创建表/存储过程。这意味着它已经连接成功了。但当我尝试运行Code First Migration的update-database命令时出现问题。有什么想法是出了什么问题吗? - Nps

0

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

首先,我尝试按照上面提到的设置启动项目。但是没有选择启动项目,我也无法选择一个。

最终,我将我的Visual Studio从2015更新1升级到了2015更新3。

update-database

执行无问题。


0
PM>Update-Database

今天我在4小时内解决了一个错误并找到了解决方案。 我在.NET编码方面非常新手,但是在PHP方面我有10多年的经验。 我花了4个小时来解决这个问题。 1.我的第一个错误:我没有在本地笔记本电脑上安装Microsoft SQL Server 2019,而是通过AZURE使用,这对于localhost不起作用,所以我下载后在本地安装了它,花了大约2个小时。 2.第二个错误已更正=

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

那对我来说可以工作

Error

Error solution

Error solved After error solved database


抱歉耽误您的时间,但您假设迁移只能在本地主机上工作是不正确的。它们甚至可以在 Azure 上工作(https://dev59.com/AnPYa4cB1Zd3GeqPgDEp#17062267)。除此之外,如果您是正确的,那么您需要很多空间来告诉您安装了 Sql Server 并连接到它。此外,我认为现有的答案已经多次指出了必要的注意事项。 - Gert Arnold

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