web-dev-qa-db-ja.com

EF Migration object already existsエラー

私は、データベースからのコードを最初に使用して、Entity FrameworkでASP.NET MVCプロジェクトに取り組んでいます。データベース内の各テーブルのモデルを取得します。モデルにいくつかの変更を加え、移行を有効にし、移行を初期化するとエラーが発生しました。

データベースには「TableName」という名前のオブジェクトが既に存在します。」

update-database -forceで試しましたが、助けにはなりませんでした。最初の移行では、すでに存在するテーブルが作成されます!

最初の移行でモデルに変更を適用し、最初からテーブルを作成しない方法

この場合、データベースとモデルの間で変更を同期するためのベストプラクティスは何ですか?

14
Arianit

実行してみてください

Add-Migration InitialCreate –IgnoreChanges 

パッケージマネージャーコンソールのコマンド。これにより、現在のモデルをスナップショットとして空の移行が作成されます。そして、実行

Update-Database 

パッケージマネージャーコンソールのコマンド。これにより、InitialCreate移行がデータベースに適用されます。実際の移行には変更が含まれていないため、この移行が既に適用されたことを示す行を__MigrationsHistoryテーブルに追加するだけです。

this を参照してください

次に、モデルを変更し、移行を追加します。

別のアプローチは、upメソッドとdownメソッドのすべてのコードを単にコメントすることです

25
Amr Alaa

私にとっては、初期移行ファイルのUPおよびDown関数のすべてのコードをコメント化してからdotnet ef database updateこれは正常に動作するはずです。初期移行をコメントアウトする前に、移行を更新してください。

3
Danish Shaikh

このエラーは、以前の移行を削除し、新しい移行が既に存在する新しいテーブルを作成しようとしたときに表示されます。以前の移行を回復すると、すべてが正常になります。

2

Amr Alaaソリューションは機能しますが、データベースは最新モデルに移行しませんでした。

以下がその仕組みです(自動移行を使用):

  1. 移行フォルダを削除
  2. Enable-migrationsを実行します
  3. 新しく作成されたConfiguration.csでこの2つのプロパティをtrueに設定します

    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
    
  4. Update-Databaseを実行-Force

データベースが最新のスキームに更新され、準備が整います。

お役に立てれば。

1
Chtiwi Malek