EF核心迁移错误:数据库“ MyDatabaseName”已存在。选择一个不同的数据库名称 [英] EF Core Migration error: Database 'MyDatabaseName' already exists. Choose a different database name

本文介绍了EF核心迁移错误:数据库“ MyDatabaseName”已存在。选择一个不同的数据库名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am running ASP.NET Core 2.1 with EF Core 2.1 application on Windows Server 2016 with SQL Server 2017 Web edition.

<$ c $的结尾c> public void Configure(IApplicationBuilder app,... Startup.cs中的方法我称 context.Database.Migrate (); 。这适用于迁移。

一切正常。

At the end of public void Configure(IApplicationBuilder app, ... method in Startup.cs I call context.Database.Migrate();. This applies migrations.
Everything works.

现在我在开发环境中使用SQL备份数据库Server 2016,将 MyDatabaseName .bak 文件移至服务器并还原数据库 MyDatabaseName 在服务器上并重新启动IIS站点。

启动应用程序(打开浏览器)时,出现以下错误:

Now I backup database in my development environment in SQL Server 2016, move MyDatabaseName .bak file to server and restore database MyDatabaseName on server and restart IIS site.
When I start application (open browser) I get the following error:


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

Application startup exception: System.Data.SqlClient.SqlException (0x80131904): Database 'MyDatabaseName' already exists. Choose a different database name.

在以下行中: context.Database.Migrate();
完整错误在底部。

in line: context.Database.Migrate();. Full error is at the bottom.

如果我将 MyDatabaseName 更改为 MyDatabaseNameX (不存在),则会创建数据库,所有迁移均已应用,我可以重置IIS,应用已启动。如果还原数据库,则会出现错误已经存在

If I change MyDatabaseName to MyDatabaseNameX (which doesn't exists) database is created, all migrations are applied, I can reset IIS, application is started. If I restore database I get error already exists.

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

Same application (exactly the same dll) runs application on development and production environment. That also means database structure is the same.

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

I need to restore database on production. I am just not sure why context.Database.Migrate() throws error?

完全错误:


应用程序启动异常:System.Data.SqlClient.SqlException
(0x80131904):数据库'MyDatabaseName'已经存在。选择一个
不同的数据库名称。
处System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,
布尔值BreakConnection,Action 1 wrapCloseInAction) SqlException
异常,布尔值breakConnection,在
处的动作
1 wrapCloseInAction)System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj,布尔值调用程序HasConnectionLock,布尔值asyncClose)
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,
SqlCommand cmdHandler,SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject
stateObj,Boolean& dataReady)在
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String
methodName,布尔异步,Int32超时,布尔asyncWrite)at
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource 1
完成,布尔型sendToPipe,Int32超时,Bo olean asyncWrite,

字符串methodName),
的System.Data.SqlClient.SqlCommand.ExecuteNonQuery()Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection
连接, DbCommandMethod executeMethod,IReadOnlyDictionary
2
parameterValues)at
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection
连接,IReadOnlyDictionary 2 Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection
连接,IReadOnlyDictionary
2 parameterValues)处
Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor。 ExecuteNonQuery(IEnumerable`1
migrationCommands,IRelationalConnection connection)at
Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Create()
at
Microsoft.EntityFrameworkCore.M igrations.Internal.Migrator.Migrate(String
targetMigration)at
MyProject.Startup.Configure(IApplicationBuilder
app,AppUserManager,Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade
databaseFacade)
中的userManager,IServiceProvider serviceProvider)C:\GitLab-Runner\builds\7cab42e4\0\web\MyProject\Startup.cs:第582行
---堆栈结束从先前引发异常的位置开始跟踪---
Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter。
Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder
app)在
处。 > c__DisplayClass4_0.b__0(IApplicationBuilder
应用程序),位于
Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder
构建器),位于
Microsoft.AspNetCore。 Hosting.Internal.WebHost.BuildApplication()
ClientConnectionId:7f6b84a3-e0ea-42c7- 947d-a9cafdaffbfa错误
编号:1801,状态:3,类:16托管环境:生产内容
根路径:C:\WWW\MyProject现在在听: http://127.0.0.1:24830
应用程序已启动。按Ctrl + C关闭。应用程序
正在关闭...

Application startup exception: System.Data.SqlClient.SqlException (0x80131904): Database 'MyDatabaseName' already exists. Choose a different database name. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, 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 dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 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 connection, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Create() at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.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 --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app) at Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter.<>c__DisplayClass4_0.b__0(IApplicationBuilder app) at Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() ClientConnectionId:7f6b84a3-e0ea-42c7-947d-a9cafdaffbfa Error Number:1801,State:3,Class:16 Hosting environment: Production Content root path: C:\WWW\MyProject Now listening on: http://127.0.0.1:24830 Application started. Press Ctrl+C to shut down. Application is shutting down...


推荐答案

这真是令人讨厌。数据库确实存在(我确实还原了它),但问题是数据库的备份所有者也已转移。

本地主机所有者的用户在服务器上不存在。因此迁移未找到数据库(因为它无权访问),因此尝试创建一个新数据库。

This was a nasty one. Database really exists (I did restore it), but problem was that with backup owner of database was also transferred.
User that was owner on localhost do not exists on server. So migrations didn't find database (because it didn't have access to) so it tries to create a new one.

这篇关于EF核心迁移错误:数据库“ MyDatabaseName”已存在。选择一个不同的数据库名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆