データモデル変更時のデータベースの更新方法

ここでは「エンティティ・フレームワーク・コードファーストによる開発 - 基本的な開発手順」 で作成したプログラムを元に、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 カラムが追加されたことがわかります。

コード・ファーストでのマイグレーション

この結果、プログラムが正常に実行されるようになります。

以上、この記事ではエンティティ・フレームワーク・コード・ファースト開発において、データモデルが変更された際、 パッケージ管理コンソールのコマンドでデータベースをマイグレーションする方法を紹介しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説