代码优先迁移中的update-database命令出错
我正在使用WPF中的桌面应用程序并使用LocalDB创建SqlRepository来存储数据。 我正在使用以下工具
- Visual Studio 2013社区,更新2
- entity framework6.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的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 – 查找指定的服务器/实例时出错)
当我将“启动项目”从另一个模块更改为包含对解决方案中所有其他项目的引用的模块时,我遇到了类似的问题并修复了它。 右键单击模块>>单击“设置为启动项目”
迭戈的回答是正确的。
当项目中没有连接字符串标记为启动项目时,会发生此问题。 然后EF尝试连接到某个默认数据库引擎以执行更新。 在我的情况下,它试图使用快递,并由于某种原因它无法连接。 并且错误被抛出。
使用选项“-Verbose”运行“update-database”。 其中一行显示使用了哪个StartUp项目。 检查此项目中的连接字符串,或将启动项目更改为具有正确连接字符串的项目。 这解决了这个问题。
正如其他答案中所解释的,问题通常来自于在Package Manager Console中使用错误的初始项目。 在我的情况下,控制台忽略了我在Default Project下拉列表中选择的值,以及-StartUpProjectName
参数,并重现了尝试连接到某个默认数据库引擎的错误行为,正如Mikk的答案描述的那样,在我的情况下使用一个SqlExpress引擎。
我的问题是由错误的解决方案配置引起的:如果您的解决方案有多个项目并且打算使用配置选项“多个启动项目”运行,但您刚从源代码控制存储库下载它,则可能是默认配置选项“单个启动项目”正在应用于解决方案(此配置值通常不在源代码控制中签入)。 在这种情况下,程序包管理器控制台只是忽略在其组合中选择的启动项目,并且只应用解决方案中的默认启动项目,该项目可能没有连接字符串,如Mikk的答案中所指定的。
所以我通过更改解决方案属性来修复它: Common properties
/ Startup project
/选择Multiple startup projects
而不是Single startup project
,之后包管理器控制台将接受项目名称并更新正确的数据库。
尝试使用此Connectionstring:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误: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。
从这个链接引用
我解决了将初始项目更改为Entity Project的错误。
看:
Update-Database -Verbose 使用StartUp项目’SCVE.Web’。 < - 这个错误使用NuGet项目'SCVE.EntityFramework'。
如果您尝试连接到Sql Server而不是localdb,请确保web.config文件中的默认连接工厂如下所示:
我能够通过向update-database命令添加参数来解决这个问题:
update-database -StartupProjectName MyApp.Web -ConnectionStringName MyAppConnectStringInWebConfig
我在新创建的ASP.NET项目中遇到了同样的问题。
首先,我尝试如上所述设置启动项目。 没有选择启动项目,我无法选择一个。
最终我将我的Visual Studio从2015 Update 1更新到2015 Update 3和
update-database
执行没有问题。