インクリメンタルなカイハツにっき

.NET 開発手法を中心に、これから始める方の一助となる記事を載せていく予定です。

実践 Entity Framework ~ Migration で変更を戻す

Entity Framework で Code First Migrations。

データベースに更新を適用してはみたものの、『あっ!間違えた!』なんてことがあります・・・よくあります!何事もなかったかのように戻して、再度適用させる。今回はそんな方法を紹介します。

適用された移行(マイグレーション)の履歴を確認する

まずは、現在までに適用された、マイグレーションを確認します。

マイグレーションファイルを確認

最新のマイグレーションが適用済みであれば、マイグレーションファイルを確認するだけです。
マイグレーションファイル?・・・Add-Migration コマンドを実行したときに作成された、Migrations フォルダ内に作成されたファイルのことです。*1

Add-Migration コマンドについてはこちら・・・

マイグレーションファイルは、設定した名称と共に、作成した時間がファイル名となっています。この時間によって、作成順に並んでいます。ここから戻したいマイグレーションの名称を探し出します。

20150610100727

Get-Migration コマンドを利用

マイグレーションの一覧はコマンドでも確認可能です。

Get-Migrations

20150611110836

マイグレーションの名称が適用降順で表示されます。

採用したいマイグレーションの名称を取得

今回の場合、

  • Initial
  • CreatePrefecture

があり、CreatePrefecture を取り消し、Initial の状態に戻したいので、使用するマイグレーションは「Initial」となります。

Update-Database で戻す

それでは、戻してみましょう。戻す時も同じく「Update-Database」コマンドを利用します。ただし引数が必要です。

パラメータ「TargetMigration」の値を対象マイグレーション名として実行します。

Update-Database -TargetMigration Initial

20150611110837

すると・・・

20150610100730

前回作成した、CreatePrefecture テーブルが削除されています。

「おー出来た出来た」と喜びたいところですが、もうひとつお仕事が。

Initial まで戻したことで、現在の CreatePrefecture マイグレーションファイルは不要となります。これは手で削除する必要があります。

20150610100731

さよ~なら~(^_^)/~

これで、次回「Add-Migration」を実行すると、Initial からの変更分をスキャフォールディングできます。

今回は単純な内容でしたので簡単にできましたが、マイグレーションの内容によってはうまく戻せない可能性があります。
そんな時の対処法は・・・こちらで。

*1:日本語では「移行ファイル」と表記されていますが、英語では「migration file」と表記されています。今後はカタカナ表記の「マイグレーションファイル」を採用します。