データモデル変更時のデータベースの更新方法
ここでは「エンティティ・フレームワーク・コードファーストによる開発 - 基本的な開発手順」 で作成したプログラムを元に、POCO によるデータモデルが変更があった場合に、どのようにデータベースを更新すればよいか説明します。
尚、ここでも Visual Studio Express 2012 for Desktop を利用しています。
データモデル変更時のデータベースの更新作業
どんなエラーが発生するのか?
では最初に、データモデルが変更された場合にどんな風になるかみてみましょう。
以前作成した Employee クラスに MiddleName というプロパティを追加します。
これを実行すると次のようなメッセージが表示されました。
An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll
「以前のコンテキストから比較しモデルが変更された」ということで、 System.InvalidOperationException 例外が発生したということですね。(で、それが未処理、ということ)
この場合、どうしたらよいでしょうか。
データベースのマイグレーション
ツール (TOOLS) メニューからライブラリパッケージマネージャ (Library Package Manager)、 パッケージ管理コンソール (Package Manager Console) を選択します。
パッケージ管理コンソールで Enable-Migrations コマンドを実行し、マイグレーションを有効化します。
Add-Migration コマンドで前回からのマイグレーションを追加します。
スクリーンショットでは m1 というラベルを指定していますが、実際にはここに意味のある変更を書いておいたほうが良いでしょう。 例えば Add-Migration Add_Employee_MiddleName などです。しかし、ここでは説明の都合上そのような名前にすると、 そのラベルに意味があるような誤解を受けると思ったのでここでは意味のなさそうな m1 としています。
ちなみにこのとき Migrations フォルダに、カラムを追加するコードが生成されます。
次に Update-Database コマンドを実行して、マイグレーションを実施します。
データベースをみると、確かに MiddleName カラムが追加されたことがわかります。
この結果、プログラムが正常に実行されるようになります。
以上、この記事ではエンティティ・フレームワーク・コード・ファースト開発において、データモデルが変更された際、 パッケージ管理コンソールのコマンドでデータベースをマイグレーションする方法を紹介しました。