Code First Migrations: Alpha 3 Released - ADO.NET team blog - Site Home - MSDN Blogs
EF.Migrationのアルファ3でた。前回はSQL CompactとSQL Expressへの依存が入ってたみたいで、ちゃんと動かせなかったけど、今回これは削除されたって。これでやっと試せる。
せっかくなので
- Code First Migrations: Alpha 3 ‘No-Magic’ Walkthrough
- Code First Migrations: Alpha 3 ‘With-Magic’ Walkthrough (Automatic Migrations)
↑この2つを試してみよう。
そのまえに!すでにEF4.1のパッケージをインストールしている場合は、削除するか最新版に更新しましょう。今回は削除したけど。これが残ってるとマイグレーションできないので気をつけてね。
まずはNoMagic(AutomaticMigrationsEnabled = false;)。書かれてる通りの操作をするとあれよあれよと、DBが更新されていく。
- データベースが作られてBlogsテーブルが出来る。
- Blogsにカラムとユニークインデックスの追加、Postsテーブルが追加。
- Postsにカラム追加しつつ、カスタムのUpdate文を実行。
※黄色い箇所は手書きしましょう。
既存のデータベースにたいしての、途中からのマイグレーションはできないってさ。
どうやってトラッキングしてるのかというとCodeFirstではEdmMetadataユーザーテーブルだったのが、__MigrationHistoryシステムテーブルに引っ越して管理されてます。
Add-Migrationで変更分のコードを自動生成。差分は手で入力。DbMigrationの派生クラスが作成されるので、いかようにもいじれますね。ただ、どんなメソッドがあるんだろね。ドキュメント希望。どっかにあるけ?
Update-DatabaseでデータベースにSQL発行。-Verbose付けとくと発行されるSQLが実行時に確認できます。ただ、手元の環境では-Scriptがエラーで動きませんでした。SQLをファイルにしてくれるオプションのはずなんだけどなー...。
続いてMagic(AutomaticMigrationsEnabled = true;)。何がマジックかというと、Add-MigrationしないでいきなりUpdate-Database。すると、ちゃんとMigrationHistoryにAutomaticMigrationとしてレコードが作られて、テーブルも作成されている。凄いね。
カスタムSQLの実行や、カラム初期値を指定する場合なんかだと、コードに指定したメタから生成される情報からだと足りないから、手書きで足してたんだけど、Automaticだとどうするかというと、これがまた単純にAdd-Migrationを呼んで、空のマイグレーションファイルを作成(Up/Downが空)しておいて、そこに書きこんでいくだけ。適用はUpdate-Databaseで、ドーン!
面白いね。しかもコレ、途中経過のDbMigrationがいないのに、ちゃんとDownしていく。なんで??-Verboseつけて実行すると、ちゃんと差分カラムの削除だけ実行してる...。まさにマジック!気持ち悪ーい。
でも、多分AutoMigrationはオススメしないかなー。何をやったのかの履歴が目で見てわからないもん。バージョン管理デキナイヨ!コードでするからやらないよ!?なのかな。
途中までTumblrで書いてたけど中途半端に長くなったので、こっちに移動しました。なのでスクリーンショットもなくてすいません。ただ!やればわかる!書いてることなぞるだけだし。MVC4のMobileチュートリアルよりよっぽどミスしないよ。
せっかくなのでお試しあれー。
あ、そうそう、結局EFのCodeFirstなのでデータベースを接続文字列ベースにしたいときは、App.ConfigにconnectionStringsを追加してその名前をDbContextの派生クラス(今回ならBlogContext)のctor : base(“名前”)とすればいいです。