web-dev-qa-db-ja.com

Add-Migrationが重複した移行を作成することがあるのはなぜですか?

EntityFrameworkバージョン5でのコードの最初の移行で奇妙な問題に直面しています。時々Update-Database保留中の変更が原因で失敗しますが、Add-Migrationコマンドは、最後の移行にすでに含まれているデータベースの変更を含む移行のみを生成し、データベースは最新です。したがって、新しい移行は空になると思います。

どうやって Add-Migrationどのような変更が必要かを検出しますか?データベースをソースとして使用していないようです。

32
Jan Deinhard

データベースモデルのスナップショットは、すべての移行とともに.resxファイルに保存されます。新しい移行を追加すると、EFは現在のデータベースモデル(モデルクラスとDbModelBuilderの設定から生成されたもの)を最後の移行と比較し、それらの間の変更を決定します。

説明している問題は、移行が同期していない場合に発生する可能性があります。 2人の開発者が2つの独立した移行を行い、これらの移行が後でデフォルトのブランチにマージされた場合に発生します。

例:

開発者1

移行AddColumnA

開発者2

移行AddColumnB

マージされたバージョン

移行AddColumnA-データベーススナップショットにはcolumnAが含まれます

移行AddColumnB-データベーススナップショットにはcolumnBが含まれますが、columnAは含まれません

別の移行を追加する場合、変更は、columnAに関する情報を含まない移行AddColumnBに対して決定されます。この問題の回避策は、最後の移行で正しいデータベースモデルのスナップショットを取得するためだけに、ダミーの移行(空のUpメソッドとDownメソッドを使用)を生成することです。

マージされたバージョン

移行AddColumnA-データベーススナップショットにはcolumnAが含まれます

移行AddColumnB-データベーススナップショットにはcolumnBが含まれますが、columnAは含まれません

移行ダミー-columnAとcolumnBを含むデータベーススナップショット

51
Lukas Kabrt