连接更新数据库命令的EF6问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接更新数据库命令的EF6问题相关的知识,希望对你有一定的参考价值。
我正在多年来第一次对需要EF迁移的数据库进行更改。这意味着在过去的两年中已经有很多代码库更改,但这是我的模型第一次发生变化。我正在使用安装在LAN上的服务器上的EF 6.1.3,VS 2017和SQL Express。
我在项目上启用了EF迁移,并且能够“添加迁移”。但是,当谈到“Update-Database”时,我有以下错误:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)
我知道当没有启用TCP连接时会发生这种情况,但是我已经仔细检查了这一点,并且能够使用我的应用程序中相同的DbContext对象和连接字符串连接到数据库。我也可以使用SQL Server对象资源管理器。它只是Update-Database失败。我在域上并使用域级身份验证。
我需要启用一些其他权限才能允许EF迁移工作吗?
编辑:对于那些建议在下面的评论中检查启动项目的人,我提供了错误跟踪的开始。我没有提供整个跟踪,因为它引导我们完成整个迁移堆栈的函数名称。包括我的确切命令行在内的相关部分是:
PM> Update-Database -ProjectName "AJSoft.CN2.Data.Model" -Verbose
Using StartUp project 'AJSoft.CN2.Data.Model'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'CN2 Test' (DataSource: SERVERSQLEXPRESS, Provider: System.Data.SqlClient, Origin: UserCode).
System.Data.SqlClient.SqlException (0x80131904): 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)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
启动项目是可以访问连接字符串的项目,无论我是指定上面的“模型”项目还是我的实际WPF启动项目,我的结果都是相同的。
好的 - 对于其他任何看过这个的人,我已经解决了这个问题。
在进一步考虑这个问题时,必须有一个不同的连接字符串用于我的项目和EF迁移,否则消息没有意义。
提供给EF Migrations的连接字符串是在我的自定义DbContext类的静态构造函数中设置的。就我而言,这是正确的行为。但是,在编译和运行项目时,将读取设置文件,并且我的代码会向连接字符串添加一些其他信息。
这就是为什么两者之间存在差异 - 在静态构造函数中将信息添加到CS中修复了错误。
我的问题是我为Package Manager Console设置了不同的环境(ASPNETCORE_ENVIRONMENT),而不是我的.NET Core项目。
在程序包管理器控制台中使用Get-ChildItem Env:
列出您的环境变量。
我使用Update-Database -Verbose
来查看命令使用的环境。
比我更改了我的环境变量,重新启动Visual Studio并使用了正确的项目设置。
以上是关于连接更新数据库命令的EF6问题的主要内容,如果未能解决你的问题,请参考以下文章