50

私はしばらくの間 EF 移行を使用しており、プロジェクトには 100 を超える移行ファイルがあります。先に進む前に、これらを単一の移行に統合したいと考えています。つまり、既存の InitialCreate 移行を、その後のすべての変更を考慮した新しいバージョンに置き換えて、他のすべての移行ファイルを削除できるようにしたいと考えています。

DB 内のすべてのデータを失うことを気にしないのであれば、これは非常に簡単に行うことができますが、気になります。

すべてのデータをそのまま維持し、Update-Database を実行するだけでデータベースをゼロから (データなしで) 再作成する機能を保持しながら、これを達成するにはどうすればよいでしょうか(Julie Lerman によって概説されたアプローチを使用することは不可能だと思います)。

4

5 に答える 5

14

この移行を維持することに関心がない場合は、移行フォルダー内のすべてを削除してから、接続文字列で新しいデータベースをターゲットにする (または新しいデータベースを渡す) ことを行いました。その後、add-migration コマンドを実行するだけです。

add-migration InitialCreate

そして、それはあなたのために移行を作成するはずです.

于 2012-11-14T14:37:14.893 に答える
2

以下の手順には、DB で何もせずに作業できるという利点があります。__MigrationHistory はそのままにしておくことができます。また、構造のバージョンが異なる複数の異なる環境がある場合にも機能します-一致するブランチがある場合。

最後の移行を最初の移行にします。トリックは、使用中のコードと DB の最も古いバージョンを使用し、その最後の移行を新しい初期移行に置き換え、以前のすべての移行を削除することです。新しいブランチは最新の移行を保持するため、古いブランチにマージした後も引き続き機能します。

したがって、OLDEST ブランチ (通常は PROD) から開始して、次のようにします。

  1. 最後の移行を除くすべてを削除する
  2. 最後の移行の「上へ」と「下へ」の両方の方法で移行コードを削除します
  3. 最後の移行のビルド アクションを「なし」に変更して、EF がそれを無視できるようにします。
  4. アクティブな接続を変更して、ローカル DB データベースを指すようにします。
  5. このローカル DB データベースが存在しないことを確認してください
  6. 追加移行初期
  7. 作成された「初期」移行から最後の移行にアップとダウンのコードをコピーします
  8. 初期移行の削除
  9. 最後の移行のビルド アクションを「コンパイル」に戻します。
  10. チェックイン
  11. 変更を上にマージ
  12. LocalDB DB の DEV ブランチでテストします。新しい初期移行とその後の移行を問題なく実行する必要があります。
  13. 最新の DB のメイン ブランチでテストする - 何もしないはずです

上記の注意は、EF 自体が実行しないものを移行に追加しない場合にのみ機能します。たとえば、DB ビューなどを追加すると、新しく作成された移行ではそれらが取得されず、コードに基づいて EF が生成するスクリプトのみが取得されます。

于 2018-08-14T12:16:36.843 に答える