Entity Framework CoreのMigrationをクラスライブラリに対して実施したい
はじめに
あるシステムを開発するのに、複数のプロジェクトに分けて開発するケースがあります。例えば、WebAPIはスマートフォンなどのアプリから呼び出され、Webアプリケーションはシステム運用で利用するみたいな例が考えられます。
あるいは、Webアプリケーションのプロジェクトと、Azure Functionsのプロジェクトの2つから構成されるものとか。
この時、Entity Framework CoreのEntityクラスとDBContextクラスは、どちらのプロジェクトでも共通なので、これも別のクラスライブラリ・プロジェクトとして独立させることになります。
以下のようなプロジェクト構成ですね。
Sample.sln
Sample.Web Webアプリケーション。Sample.Dbを参照
Sample.API Web APIプロジェクト。Sample.Dbを参照
Sample.Db DBのEntityクラスを定義したクラスライブラリ
課題
Entity Framework Coreのコードファーストで開発する場合、Migrationコードは、やはりSample.Dbプロジェクトに置きたいと思うのが普通だと思います。
しかし、Sample.Dbのあるフォルダに移動して、
dotnet ef migrations add NewMigration
のようにしても、このコードは以下のメッセージを出して失敗します。
Unable to create an object of type 'AppDbContext'.
For the different patterns supported at design time,
実際に利用するデータベースプロバイダーやDBContextを見つけることができないからです。
Sample.WebやSample.APIのフォルダに移動して、上記コマンドを実行すれば成功しますが、それだとMigrationコードは、Sample.Dbには作成されません。
まあ、それでもいいのですが、やっぱりSample.Dbに作成したいですよね。少なくとも僕はそう思います。
解決策
こんな時は、以下のようなコマンドを打てばOKです。
dotnet ef migrations add NewMigration --startup-project ..//Sample.API
databaseに反映させるには、
dotnet ef database update --startup-project ..//Sample.API
Sample.APIのところは、Sample.WebでもOKです。
別解
Microsoftの公式ドキュメントの「別の移行プロジェクトを使用する」のページでは、別の方法も示されています。
こちらは、Webプロジェクトあるいは、APIプロジェクトのソースに、どのアセンブリにMigrationコードを生成するかを指定するコードを追加するというものです。
どちらも一長一短がありますが、ソースコードに手を入れたくない場合は、ここで示した--startup-project
オプションを使うのが良いと思います。
Author And Source
この問題について(Entity Framework CoreのMigrationをクラスライブラリに対して実施したい), 我々は、より多くの情報をここで見つけました https://qiita.com/gushwell/items/4c1e54ab3281670db0b9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .