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

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

実践 Entity Framework ~ Migration で変更を戻す - その2

Entity Framework で Code First Migrations。
前回、マイグレーションを指定して適用することにより、その状態へ戻す方法を紹介しました。いわゆる正攻法です。しかし世の中、残念ながら正攻法だけでは事は進まないものです。
データを格納したまま、データベースの変更ができて非常に便利ではありますが、そのデータがあると失敗することがあるもの事実です。
例えば、以前は外部キーを設定していて、新しいマイグレーションでは設定を外し、その状態で以前の外部キーに反するデータを入れると、当然ながらデータが入ったままでは戻せません。

そんな時はどうするか・・・答えは簡単。データ消してしまえ!

戻すだけではなく、新しく適用するときも同様です。適用しようとする構造で現在のデータが収まるか。収まらない場合は当然失敗します。旧構造の状態で新構造の整合性が取れたデータにするのは、場合によっては不可能かもしれません。

データベース再生成

というわけで、もうひとつの方法は、「戻す」というより「やり直す」方法です。

まず、不必要なマイグレーションファイルを削除します。

20150610100731

そして、現在のデータベースに別れを告げます。

20150610100732

おつかれさまでした・・・それでは、新しく迎え入れましょう。「Update-Database」を実行するだけです。

Update-Database

20150611110838

データベースを作成し、残っているマイグレーションファイル分、データベースに適用します。これで、「Initial」状態に戻りました。

ちなみに変なメッセージ出てますが・・・読んだままです。
じゃ、あまりにも不親切なんで・・・

最後に適用したマイグレーションの内容と現在のコードの状態が異なる場合、「なんか違うで。マイグレーションファイルの内容以上のことできないけどええか?ていうか、それ以上の事は無理やで。新しいマイグレーションファイル作ったほうがええんとちゃうの?」と言ってきます。

前回の「戻す」方法と今回の「やり直す」方法は、是非とも理解しておきたいポイントです。開発当初から100%の設計などほぼ皆無でありますし、そのためのマイグレーションです。そのマイグレーションを利用していると、どうしても「戻し」たり「やり直し」たりするものです。たぶん・・・いや、きっと。

それでは、無事に戻ったところで、今度は Id フィールドは利用せず、Code フィールドをキーとしてみましょう。
続きはこちらで・・・