質問: 私はSQL Server 2017 WebエディションでWindows Server 2016上のEF Core 2.1アプリケーションでASP.NET Core 2.1を実行しています。 `public void Configure(IApplicationBuilder app, ...` `Startup.cs`メソッド)の最後で`public void Configure(IApplicationBuilder app, ...` `context.Database.Migrate();`を呼び出し`context.Database.Migrate();` 。これは移行を適用します。 すべてが機能します。 SQL Server 2016で開発環境にデータベースをバックアップし、 `MyDatabaseName` `.bak`ファイルをサーバーに移動し、サーバー上のデータベース`MyDatabaseName`を復元し、IISサイトを再起動します。 私はアプリケーション(オープンブラウザ)を起動すると、私は次のエラーが表示されます: > アプリケーションの起動例外:System.Data.SqlClient.SqlException(0x80131904):データベース 'MyDatabaseName'は既に存在します。別のデータベース名を選択してください。 > > 行内: `context.Database.Migrate();` 。完全なエラーは下部にあります。 私が変更した場合は`MyDatabaseName`する`MyDatabaseNameX` (存在しない)データベースが作成され、すべてのマイグレーションが適用され、私はIISをリセットすることができ、アプリケーションが起動されます。データベースを復元するとエラーが発生し`already exists` 。 同じアプリケーション(まったく同じdll)は、開発環境と運用環境でアプリケーションを実行します。つまり、データベース構造も同じです。 私は本番環境でデータベースを復元する必要があります。 `context.Database.Migrate()`がエラーをスローする理由は`context.Database.Migrate()`ません。 完全なエラー: > アプリケーションの起動例外:System.Data.SqlClient.SqlException(0x80131904):データベース 'MyDatabaseName'は既に存在します。別のデータベース名を選択してください。 System.Data.SqlClient.SqlConnection.OnError(SqlException例外、ブールブレーク接続、Action `1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action` 1 wrapCloseInAction) System.Data.SqlClient.SqlCommandでSystem.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet、bulkCopyHandler、TdsParserStateObject stateObj)の.ThrowExceptionAndWarning(TdsParserStateObject stateObj、Boolean callerHasConnectionLock、Boolean asyncClose) System.Data.SqlClient.SqlCommandで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, IReadOnlyDictionary` RunExecuteNonQueryTds(String methodName、Boolean async、Int32 timeout、Boolean asyncWrite) `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, IReadOnlyDictionary` Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection、IReadingConnection connection、IReadOnlyDictionary `2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary` `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, IReadOnlyDictionary` 2 parameterValues) `2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary` Microsoft.EntityFrameworkCore.Migrations.InternalでMicrosoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.CreateでIEnumerable`1 migrationCommands、IRelationalConnection接続)()で2 parameterValues)。 Migrator.Migrate(String targetMigration):Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade)MyProject.Startup.Configure(IApplicationBuilderアプリケーション、AppUserManagerユーザーマネージャ、IServiceProvide r serviceProvider):C:\ GitLab-Runner \ builds \ 7cab42e4 \ 0 \ web \ MyProject \ Startup.cs:行582 ---例外がスローされた前の場所からのスタックトレースの終了--- Microsoft.AspNetCore.Hosting Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter。<> c__DisplayClass4_0.b__0(IApplicationBuilderアプリケーション):Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilderビルダー):Microsoft.AspNetCore.Server.IISIntegration.IISSetupFilter .ContainerBasedStartup.Configure(IApplicationBuilderアプリケーション) .AspNetCore.Hosting.Internal.WebHost.BuildApplication()ClientConnectionId:7f6b84a3-e0ea-42c7-947d-a9cafdaffbfaエラー番号:1801、状態:3、クラス:16ホスティング環境:プロダクションコンテンツルートパス:C:\ WWW \ MyProject Now聞いている: http : //127.0.0.1 : 24830アプリケーションが開始しました。 Ctrl + Cを押してシャットダウンします。アプリケーションがシャットダウンしています... > >
回答: これは厄介なものでした。データベースが本当に存在する(私はそれを復元した)が、問題は、データベースのバックアップ所有者も転送されたことであった。 localhostの所有者であったユーザーがサーバーに存在しません。そのため、移行ではデータベースが見つからなかったため(アクセスできなかったため)、新しいデータベースを作成しようとしました。