実践 Entity Framework ~ Migration で変更を戻す - その2
Entity Framework で Code First Migrations。
前回、マイグレーションを指定して適用することにより、その状態へ戻す方法を紹介しました。いわゆる正攻法です。しかし世の中、残念ながら正攻法だけでは事は進まないものです。
データを格納したまま、データベースの変更ができて非常に便利ではありますが、そのデータがあると失敗することがあるもの事実です。
例えば、以前は外部キーを設定していて、新しいマイグレーションでは設定を外し、その状態で以前の外部キーに反するデータを入れると、当然ながらデータが入ったままでは戻せません。
そんな時はどうするか・・・答えは簡単。データ消してしまえ!
戻すだけではなく、新しく適用するときも同様です。適用しようとする構造で現在のデータが収まるか。収まらない場合は当然失敗します。旧構造の状態で新構造の整合性が取れたデータにするのは、場合によっては不可能かもしれません。
データベース再生成
というわけで、もうひとつの方法は、「戻す」というより「やり直す」方法です。
まず、不必要なマイグレーションファイルを削除します。
そして、現在のデータベースに別れを告げます。
おつかれさまでした・・・それでは、新しく迎え入れましょう。「Update-Database」を実行するだけです。
Update-Database
データベースを作成し、残っているマイグレーションファイル分、データベースに適用します。これで、「Initial」状態に戻りました。
ちなみに変なメッセージ出てますが・・・読んだままです。
じゃ、あまりにも不親切なんで・・・
最後に適用したマイグレーションの内容と現在のコードの状態が異なる場合、「なんか違うで。マイグレーションファイルの内容以上のことできないけどええか?ていうか、それ以上の事は無理やで。新しいマイグレーションファイル作ったほうがええんとちゃうの?」と言ってきます。
前回の「戻す」方法と今回の「やり直す」方法は、是非とも理解しておきたいポイントです。開発当初から100%の設計などほぼ皆無でありますし、そのためのマイグレーションです。そのマイグレーションを利用していると、どうしても「戻し」たり「やり直し」たりするものです。たぶん・・・いや、きっと。
それでは、無事に戻ったところで、今度は Id フィールドは利用せず、Code フィールドをキーとしてみましょう。
続きはこちらで・・・