web-dev-qa-db-ja.com

エンティティフレームワークで明示的な移行を生成できません

新しい移行を追加していますが、このメッセージは次のことを示しています。

次の明示的な移行が保留中のため、明示的な移行を生成できません:[201203170856167_left]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用します。

誰でも私を助けることができますか?

84
Noman Saeed

アプリケーションに未処理の移行があり、別の移行を追加する前にUpdate-Databaseを実行する必要があることがわかります。

74
Ladislav Mrnka

同じ問題がありました。どうやらエンティティフレームワークは、データベースに接続できないときにこのエラーを生成します。そのため、他の問題を検索する前にアクセスできることを確認してください。

42
Robin Dorbell

パッケージマネージャーコンソールから "update-database"を実行してデータベースに変更をプッシュする必要がありますOR移行フォルダーから保留中の移行ファイル([201203170856167_left])を削除してから再実行「追加移行」を使用して、編集に基づいて新しい移行を作成します。

31
socketman

このエラーは、移行がもはや認識されないことも意味します。これは、Migrations.ConfigurationのContextKeyの値を変更した後に起こりました。解決策は、単にデータベーステーブル「__MigrationHistory」のContextKeyを更新する(または、推測されるConfigurationクラスの値を元に戻す)ことでした。 ContextKeyとアプリケーションの名前空間は一致する必要があります。

24
Thomas

1.接続文字列/接続許可

接続文字列をもう一度確認してください。

接続しているユーザーstill[__MigrationHistory]からの読み取り権限を持ち、スキーマを編集する権限を持っていることを確認してください。

Integrated Security(Windows Auth)を使用して、アプリケーションまたはWeb構成ファイルの接続文字列を変更して試すこともできます。 add-migrationコマンドはyourselfとして。

例えば:

connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;" 

この接続文字列は、DbContextが配置されているプロジェクトのApp.configファイルに入ります。

2.スタートアッププロジェクト

コマンドラインでStartupプロジェクトを指定するか、DbContextConfigurationおよびMigrationsフォルダーでプロジェクトを右クリックして、StartUpプロジェクトとして設定することができます。私は真剣です、これは実際に助けることができます。

enter image description here

13
Jess

同じ問題があり、上記の回答からいくつかのヒントで解決できました:

  • パッケージマネージャーコンソールで、既定のプロジェクトを確認します(移行構成のあるプロジェクトをポイントします)
  • Startup-projに有効な接続文字列(または
  • 移行を伴うプロジェクトに、有効な接続文字列を含むapp.config/web.configがあることを確認します
  • DBのアクセス許可を確認します(接続文字列で構成されたユーザー)

パッケージマネージャーコンソールで "update-database -verbose"を使用して、移行が接続を試みる特定の情報を取得します。 (私の場合、スタートアッププロジェクトが正しく設定されていないことを確認するのに役立ちました...)

8
flex

この問題が発生した場合は、add-migrationコマンドレットにパラメーターを追加してみてください。たとえば、起動プロジェクトと接続文字列名を指定すると、EFがターゲットデータベースを見つけるのに役立ちます。

add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL

どこ:

Delta_Defect_097は移行の名前です

your.namespace.ContextClassNameは、移行フォルダー内の構成クラスの名前であり、完全な名前空間が先頭に付きます。

DeltaProjectは、web.configまたはapp.configファイルを含むメインプロジェクトの名前です。

DeltaSQLは、web.configまたはapp.configファイルで定義されている接続文字列の名前です。

6
Yves Rochon

Update-Databaseを使用していない場合は、削除できます。更新を実行した場合、Update-Database -TargetMigration "NameOfPreviousMigration"を使用してロールバックし、削除します。

参照: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

このテキストをここから直接コピーしました。 最後のAdd-Migrationコマンドを元に戻すにはどうすればよいですか?

6
nu everest

このエラーは、別の明示的な移行を実行する前にコミットする必要がある保留中の移行があることを意味します。選ぶことができます

  1. Update-Databaseコマンドを使用して、保留中の移行を実行します
  2. それらの保留中の移行を削除します。最も安全な方法は、Migrationsフォルダを開いて、[201203170856167_left]を右クリックし、[プロジェクトから除外する]です。

この後、「Add-Migration ...」を再度開始できます

それが役に立てば幸い

5
Hung Vu

あいまいさがあり、エラーがあります。最善の方法は、現在の移行ファイルを除外し、新しいmigration(add-migration)ファイルを作成してから、新しい移行の内容を除外ファイルにコピーし、それを再度含めてpdate-databaseコマンド。

3
Sachin Cholkar

ちょうど私の2セント:

私のシナリオ:

  1. ローカルデータベースを動作状態に復元しました。
  2. 既に移行が適用されています。
  3. 新しい移行を追加しようとするたびに、OPについて述べたように、保留中の移行に関するエラーが発生しました。

解決:

これを回避するために、私はただより明示的なパラメータを提供しました:

Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose

App.configフォルダーに設定を設定して、この動作をデフォルトに設定できるため、毎回明示的なパラメーターを指定する必要がないと考えています。しかし、私はこれを行う方法がわかりません。

3
IbrarMumtaz

ローカルデータベースに__MigrationHistoryが入力されていなかったか、存在していませんでした。テーブルを手動で作成し、そのテーブルのデータをPRODからローカルデータベースに移行しました。これにより、VSは移行が適用されたと見なしました(移行されていた)。

1
contactmatt

ヒント:わからない場合は、移行コマンドに-Scriptスイッチを使用することを常にお勧めします。また、Update-Databaseが実際に行うことを理解するのにも役立ちます。

次を実行してデータベースを更新し、手動で適用できるスクリプトを取得します(または-Scriptタグなしで再度実行します)。

Update-Databaseの場合、次を実行します。

Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive

ここで、SQL_AzureLiveは私の設定の名前付き接続文字列です。

その後、SQLが正しく見えることを確認し、適用して完了します。他の多くの人が接続文字列が間違っているか無効であると言っているように、このエラーが発生します。

1
Simon_Weaver

私はこのような同じ問題を解決しました:

  • 古い移行ファイルを削除する
  • 更新データベース-force
  • Add-Migration AddedEntity
  • データベースを更新する
1
yilmazdincsoy

私は同じ問題を抱えていましたが、Add-Migration 'MigrationName' -Forceを実行するだけで解決できました

-Forceは重要な部分です。

1
Evan Barke

別の方法でやりました。データベースを完全に削除し、vs。で再度「update-database」を実行しました。

0
Ghadir Farzaneh

私もこの問題に出会いました。新しいDBを作成し、コードファーストDB移行の保留中の変更があり、「データベースの更新」コマンドを実行しようとしたときに発生しました。解決策:「Add-Migration -MigrationName」コマンドを実行して、新しいDBの新しい移行を作成します。次に、「Update-Database」コマンドを実行します。

0
Pritam

私の場合(MS Visual Studioを使用)、Visual Studioを再起動するのと同じくらい簡単でした。

0

これは、dbにすでに存在する古い移行のクラスの名前を突然変更したときに起こりました。 VCSの履歴を確認し、それを確認して名前を変更しました。すべてがその後働いた。

0
Doctor Coder

私の場合、Migrationsフォルダーから移行ファイル(あなたの場合は「201203170856167_left」)を削除し、パッケージマネージャーコンソールで以下のコマンドを実行しました

Add-Migration <Parameter>
Update-Database
0
Surendra Mourya

Add-Migrationを実行したときに最新であることがわかっていたデータベースでも、この問題が発生しました。 Add-Migrationコマンドを2回実行するだけで解決しました。上記のRobin Dorbellが示唆したように、接続の問題が疑われます。

0
spadelives

シナリオ

  • 私は新しいDB移行を作成したブランチで働いています。
  • マスターから更新する準備はできていますが、マスターには最近のDB移行もあります。
  • 競合を防ぐために、ブランチのデータベース移行を削除します。
  • 「マスターから更新」します。

問題

マスターから更新した後、「Add-Migration my_migration_name」を実行しますが、次のエラーが表示されます。

次の明示的な移行が保留中のため、明示的な移行を生成できません:[201607181944091_AddExternalEmailActivity]。新しい明示的な移行を生成する前に、保留中の明示的な移行を適用します。

したがって、「Update-Database」を実行すると、次のエラーが表示されます。

保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません

ソリューション

この時点で、「Add-Migration my_migration_name」を再実行すると問題が解決しました。私の理論では、「Update-Database」を実行すると、「Add-Migration」が機能するために必要な状態ですべてが取得されたということです。

0
Tod Birdsall

もっと簡単な問題がありました。 VSは、ワークステーションに接続されたクライアントのサイトにVPN接続したときに、このエラーを誤って報告しました。問題は、DBMSセキュリティが、実際のローカルIPからの要求のみを受け入れるように設定されていたことです。 VPNをオフにするだけで問題は解決しました。

0
spadelives