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

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

分割したプロジェクトで Code First Migrations を有効化する

実際の開発において、ソリューション内で複数のプロジェクトを作成することはよくあることだと思います。この場合、Entity Framework の Code First Migrations を利用する場合、少し注意する点があります。

プロジェクト構成の例

例えば次のようなプロジェクト構成だとします。

プロジェクト構成

BusinessComponent
ロジック用
WebApplication
WebUI用
Test
テスト用

WebApplication は BusinessComponent を参照
Test は WebApplication と BusinessComponent を参照

ここで

BusinessComponent プロジェクト
Context クラスと、テーブルエンティティクラス
public class Prefecture
{
	[Key]
	public string Code { get; set; }

	...
}
public class Town
{
	[Key]
	public string Code { get; set; }

	...
}
Test プロジェクト
マイグレーションファイル(マイグレーションを有効化するプロジェクト)
WebApplication プロジェクト
Web.config 内で、connectionString を設定

web.config-connectionString

と、各々役割があるとします。まずは、「Enable-Migrations」でマイグレーションを有効化したいのですが、どのようにすればよいでしょうか?

Enable-Migrations コマンドパラメータ

Enable-Migrations コマンドについては次で解説しています。Enable-Migrations コマンドにはいくつかのパラメータが用意されています。次の3つのパラメータを利用してみます。

ContextTypeName
Context クラスが含まれるプロジェクトを指定します
ProjectName
Configuration ファイル、マイグレーションファイルが作成されるプロジェクトを指定します
StartUpProjectName
ConnectionStrings が設定された Configuration ファイルが含まれるプロジェクトを指定します
Enable-Migrations -ProjectName Test -ContextProjectName BusinessComponent -StartUpProjectName WebApplication

Enable-Migrations

これで、Test プロジェクト内に、Migrations フォルダが作成され、その中に Configuration ファイルが作成されます。

Add-Migration, Update-Database も同じく

「Add-Migration」を実行する際も、同じくパラメータを指定します。ただし、ContextProjectName は不要です。(指定できません)

Add-Migration マイグレーション名 -ProjectName Test -StartUpProjectName WebApplication

Add-Migration

Update-Database -ProjectName Test -StartUpProjectName WebApplication

Update-Database

これで、意図したデータベースとテーブルが作成されています。

Update-Databaseの結果