分割したプロジェクトで 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 を設定
と、各々役割があるとします。まずは、「Enable-Migrations」でマイグレーションを有効化したいのですが、どのようにすればよいでしょうか?
Enable-Migrations コマンドパラメータ
Enable-Migrations コマンドについては次で解説しています。Enable-Migrations コマンドにはいくつかのパラメータが用意されています。次の3つのパラメータを利用してみます。
- ContextTypeName
- Context クラスが含まれるプロジェクトを指定します
- ProjectName
- Configuration ファイル、マイグレーションファイルが作成されるプロジェクトを指定します
- StartUpProjectName
- ConnectionStrings が設定された Configuration ファイルが含まれるプロジェクトを指定します
Enable-Migrations -ProjectName Test -ContextProjectName BusinessComponent -StartUpProjectName WebApplication
これで、Test プロジェクト内に、Migrations フォルダが作成され、その中に Configuration ファイルが作成されます。
Add-Migration, Update-Database も同じく
「Add-Migration」を実行する際も、同じくパラメータを指定します。ただし、ContextProjectName は不要です。(指定できません)
Add-Migration マイグレーション名 -ProjectName Test -StartUpProjectName WebApplication
Update-Database -ProjectName Test -StartUpProjectName WebApplication
これで、意図したデータベースとテーブルが作成されています。