EF Core 迁移错误:数据库“MyDatabaseName”已存在。选择不同的数据库名称

Mak*_*kla 4 entity-framework-core entity-framework-core-migrations entity-framework-core-2.1

我在带有 SQL Server 2017 Web 版的 Windows Server 2016 上运行带有 EF Core 2.1 应用程序的 ASP.NET Core 2.1。

在我调用的public void Configure(IApplicationBuilder app, ...方法结束时。这适用于迁移。 一切正常。Startup.cscontext.Database.Migrate();

现在我在 SQL Server 2016 的开发环境中备份数据库,将MyDatabaseName .bak文件移动到服务器并MyDatabaseName在服务器上恢复数据库并重新启动 IIS 站点。
当我启动应用程序(打开浏览器)时,出现以下错误:

应用程序启动异常:System.Data.SqlClient.SqlException (0x80131904):数据库“MyDatabaseName”已经存在。选择不同的数据库名称。

在线:context.Database.Migrate();。完整的错误在底部。

如果我更改MyDatabaseNameMyDatabaseNameX(不存在)数据库,则会应用所有迁移,我可以重置 IIS,启动应用程序。如果我恢复数据库我得到错误already exists

相同的应用程序(完全相同的 dll)在开发和生产环境中运行应用程序。这也意味着数据库结构是相同的。

我需要在生产中恢复数据库。我只是不确定为什么context.Database.Migrate()会抛出错误?

完整错误:

应用程序启动异常:System.Data.SqlClient.SqlException (0x80131904):数据库“MyDatabaseName”已经存在。选择不同的数据库名称。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader stateObj,TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource 1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand .ExecuteNonQuery(IRelationalConnection 连接,IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary2 个参数值)在 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Create() 在 Microsoft.EntityFrameworkCore.Migrations.Internal.Migrations.Internal.Migrations. .Migrate(String targetMigration) at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade) at MyProject.Startup.Configure(IApplicationBuilder app, AppUserManager userManager, IServiceProvider serviceProvider) in C:\GitLab-Runner\builds\7cab42e4\0\web\ MyProject\Startup.cs:line 582 --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup。在 Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter.<>c__DisplayClass4_0.b__0(IApplicationBuilder app) 在 Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder builder) 在 Microsoft.AspNetCore 配置(IApplicationBuilder 应用程序)。 Hosting.Internal.WebHost.BuildApplication() ClientConnectionId:7f6b84a3-e0ea-42c7-947d-a9cafdaffbfa 错误号:1801,State:3,Class:16 托管环境:Production 内容根路径:C:\WWW\MyProject 现在收听:AspNetCore.Hosting.Internal.WebHost.BuildApplication() ClientConnectionId:7f6b84a3-e0ea-42c7-947d-a9cafdaffbfa Error Number:1801,State:3,Class:16 托管环境:Production 内容根路径:C:\WWW\MyProject 正在收听在:AspNetCore.Hosting.Internal.WebHost.BuildApplication() ClientConnectionId:7f6b84a3-e0ea-42c7-947d-a9cafdaffbfa Error Number:1801,State:3,Class:16 托管环境:Production 内容根路径:C:\WWW\MyProject 正在收听在:http://127.0.0.1:24830 应用程序启动。按 Ctrl+C 关闭。应用程序正在关闭...

Mak*_*kla 6

这是一个令人讨厌的。数据库确实存在(我确实恢复了它),但问题是数据库的备份所有者也被转移了。
服务器上不存在 localhost 上的所有者用户。所以迁移没有找到数据库(因为它没有访问权限)所以它试图创建一个新的。