EntityFrameworkバージョン5でのコードの最初の移行で奇妙な問題に直面しています。時々Update-Database
保留中の変更が原因で失敗しますが、Add-Migration
コマンドは、最後の移行にすでに含まれているデータベースの変更を含む移行のみを生成し、データベースは最新です。したがって、新しい移行は空になると思います。
どうやって Add-Migration
どのような変更が必要かを検出しますか?データベースをソースとして使用していないようです。
データベースモデルのスナップショットは、すべての移行とともに.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を含むデータベーススナップショット