web-dev-qa-db-ja.com

entity-framework-coreで移行をマージする

すべての移行ファイルを1つにマージすることは可能ですか?

初期移行を作成しました。

dotnet ef migrations add InitialMigration

ソース

モデルに変更がある場合はいつでも、新しい移行更新を作成します。

しかし、現在、移行更新ファイルが多すぎます。すべての移行ファイルを1つにマージすることは可能ですか?

もちろん、データベースのドロップはオプションではありません。データを保持する必要があります!

17
Raskolnikov

EF 6.XにはオプションIgnoreChangesがあります。それはあなたのシナリオにぴったりです。しかし、残念ながらそれはEFコアで利用可能な機能ではありません。

しかし、回避策があります。

ステップ1:Migrationsフォルダー内のすべての移行スクリプトを削除します。

ステップ2:パッケージマネージャーコンソールで:実行

_PM> Add-Migration InitialCreate
_

ステップ3:Up()およびDown()メソッドコードの両方を削除します。これを行う前に、手順5で再度必要になるため、これらのメソッドを別の場所に保存しておいてください。

ステップ4:実行:

_ PM> Update-Database
_

新しいレコードを___EFMigrationsHistory_テーブルに挿入します。

ステップ5:その後、上記の移行スクリプト(つまり_.._InitialCreate_)Up()およびDown()メソッドを入力しますステップ3から安全な場所に保管されているコンテンツから。

それだ。これで移行ファイルは1つだけになります:)

注:EFコアとパッケージマネージャーコンソール(PM): パッケージマネージャーコンソール

26
Sampath

これを行う1つの方法は、すべての移行ファイルを物理的に削除し、新しいファイルを追加することです。マイグレーションが「Migrations」フォルダーにある場合は、単にそれを削除できます。それ以外の場合は、「ModelSnapshot」ファイルも削除する必要があります。このアプローチで問題を解決できると思います。

3
kizilsu

すべてではなくN個の最後のマイグレーションをマージする場合、プロトコルは同じではありません。

  1. N個の最後のマイグレーションを元に戻します(1つずつ)。それぞれ次の2つのコマンドを使用します。
    • dotnet ef database update NameOfTheLastMigration
    • dotnet ef migrations remove
  2. データベースに適用を元に戻します:
    • dotnet ef database update
  3. 「マージ」移行を作成します。
    • dotnet ef migrations add NameOfTheMergeMigration
2
Romain Deneau