25

どうにかして EF5 プロジェクトを進められない状態にしてしまいました。

「update-database」を実行すると、次のようになります。

保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません。保留中のモデルの変更をコードベースの移行に書き込むか、自動移行を有効にします。自動移行を有効にするには、DbMigrationsConfiguration.AutomaticMigrationsEnabled を true に設定します。Add-Migration コマンドを使用して、保留中のモデルの変更をコードベースの移行に書き込むことができます。

OK、いいので、「移行を追加」しようとすると、次のようになります。

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

20 後藤 10 ??

この時点で私は何をすべきですか?(NHibernate への切り替えを超えて?)

4

7 に答える 7

7

私にとってうまくいったのは:

  1. すべての変更を元に戻し (最初にバックアップを作成)、既知の良好な状態に戻します。
  2. やってadd-migration DummyMigrationます。それは私がコメントしたいくつかの偽の変更を生み出しました
  3. update-database移行とメタデータを[__MigrationHistory]テーブルに追加するために呼び出されます。
  4. 必要な変更を行います (以前に取得したコードのバックアップから)。
  5. 通常のadd-migration/を実行しupdate-databaseます。

理想的ではなく、より良い解決策があるかどうかを確認するのはクールですが、それは私にとってはうまくいきました.

于 2013-07-22T21:46:33.277 に答える
1

Configuration.csクラスの次の値を から に変更しfalseましたtrue

AutomaticMigrationsEnabled = true; 

App_Dataフォルダーで、プロジェクトのデータベースの名前を変更しました。ファイルの末尾は.mdfで (新しいファイルが作成されます)、パッケージ マネージャー コンソールで次のコマンドを入力しました。

データベースを更新する

その後、保留中の移行はスムーズに実行されました。

これは私にとってはうまくいきましたが、これがベストプラクティスである場合、私は 100% ではありません。いずれにせよ、移行のためのこのEntity Framework Code Firstガイドは次のように述べています。

「テーブルが既に存在し、作成できないことを示すエラーが発生した場合は、データベースを削除した後、update-database を実行する前にアプリケーションを実行したことが原因である可能性があります。その場合は、Movies.mdf ファイルを削除してください。もう一度 update-database コマンドを再試行してください。それでもエラーが発生する場合は、移行フォルダーを削除してください.."

また、AutomaticMigrationsEnabled = true;このMSDN の記事については、Data Points : A Code First Migrations Mystery: Solvedで、「移行は自動的に実行できます。つまり、モデルの変更が検出され、変更に対応する移行が作成され、データベースで実行されます。これらはすべて実行時に行われます。データベースの初期化中の時間.自動移行は単純なアプリには便利ですが、それらをほとんど制御できないため、通常、有効にすることはお勧めしません.Code First がデフォルトを false に切り替えたときはうれしかったです."

于 2016-10-18T11:43:23.497 に答える
0

これは、テーブルが存在する場合でも、移行スキーマの 1 つにモデルの違いがあるため、移行と同じベースを持つ移行とマージしようとしている場合に発生する可能性があります。

この問題を解決するためにできることは、コマンドでマージ移行を作成することです

追加-移行 -IgnoreChanges

移行名が続く

これにより、現在のモデルをスナップショットとして持つ空の移行が作成されます。したがって、これによりモデルの違いの問題が解決され、テーブルとモデルが同期されます

于 2019-03-29T10:48:48.620 に答える