ASP.NET MVC(試したのは5)で、entity frameworkを使ったmodelやサービス部を別のクラスライブラリプロジェクトに切り出した時に、update-databaseのやり方で若干ハマったのでメモ。
環境はVisual studio 2015 update3
結論から言うと
|
|
でOK。
Class library
クラスライブラリ単独でmigrationできるように設定します。
Project作成
普通のクラスライブラリとして作成します。New Project->Templates=>Visual C#->Class Libraryです。
説明上プロジェクト名をLibSomethingとします。
パッケージ
Package Manager Consoleで、Default projectをLibSomethingとし(←かなり忘れがち)て、
|
|
を実行。
DB Context
LibSomething.Modelsフォルダを作って、DbContextを継承したクラスを作ります。ここではSomethingDBContext。
この時点では中身は無くてOK。
|
|
migrationの有効化
クラスライブラリ上でマイグレーションを有効にします。
|
|
そうすっと、Migrations/Configuration.csが作られるはず。
エンティティーやMigrationの追加
Code Firstのお作法にのっとって、Modelsにエンティティクラスを作って、SomethingDBContextに
|
|
を追加します。んで、
|
|
ここまでで、code first migrationの体はなんとなくできましたが、update-databaseは?となるわけです。
ASP.NET MVCアプリ
同じソリューション内にASP.NET MVCアプリプロジェクトを作ります。
Classライブラリを参照して、connect stringを設定、update-databaseを実行します。
参照
Classライブラリプロジェクトを参照。
こっちでもPackage Manager Consoleで、Default projectをASP.NET MVCアプリプロジェクトとし
|
|
connect string
Web.configに
|
|
connectionString部はちゃんとしたの書いてください。
update-database
ここが今回の肝です。
Default projectをASP.NET MVCアプリで、
|
|
これでweb.configの接続文字列に指定したDBに対してマイグレーションが実行されるはず。
テストプロジェクトでは
テストプロジェクト(MSTest使用)では[AssemblyInitialize]でDBごと再作成したりしてます。
|
|
app.configに
|
|
とか書いときます。
正解かどうかは知りません。