我正在多年来第一次对需要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: SERVER\SQLEXPRESS, 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启动项目,我的结果都是一样的。
答案 0 :(得分:0)
好的 - 对于其他任何看过这个的人,我已经解决了这个问题。
在进一步考虑这个问题时,将作为用于我的项目和EF迁移的不同连接字符串,否则该消息毫无意义。
提供给EF Migrations的连接字符串是在我的自定义DbContext类的静态构造函数中设置的。就我而言,这是正确的行为。 但是在编译和运行项目时,会读取一个设置文件,我的代码会将一些其他信息添加到连接字符串中。
这就是为什么两者之间存在差异 - 在静态构造函数中将信息添加到CS修复了错误。
答案 1 :(得分:0)
我的问题是我为Package Manager控制台设置了不同的环境(ASPNETCORE_ENVIRONMENT)而不是我的.NET Core项目。
在程序包管理器控制台中使用Get-ChildItem Env:
列出您的环境变量。
我使用Update-Database -Verbose
查看命令使用的环境。
我改变了我的环境变量,重新启动了Visual Studio并使用了正确的项目设置。