3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Entity Framework Coreで、同じプロジェクトに複数のDBContextを入れる場合のマイグレーションの使い分け方

Last updated at Posted at 2024-10-20

概要

Entity Framework CoreのCode Firstでは、DBContextを継承した型でDBのテーブルを定義すると、コマンドでDBのマイグレーションをしたりそのためのSQL文を出力できます。しかし、1つのプロジェクトで複数のDBを扱いたい場合は、複数のDBContext派生型を作って同じコマンドを打っても、マイグレーションが上手く行きません。その場合のマイグレーションのやり方です。

解決方法

次のように、通常のマイグレーションのコマンドに、2つのオプションを追加します。

dotnet ef migrations add <このマイグレーションの名前> --context <DBContext派生型のクラス名> --output-dir <このマイグレーションの出力先フォルダパス>

contextオプションに、どのDBContext派生型のマイグレーションを追加するかを指定します。ここはクラス名をそのまま指定します。

そのままだと別々のDBContext派生型のマイグレーション出力が混ざって分かりづらくなるため、output-dirオプションに、出力先のフォルダを指定します。DBContext派生型ごとにフォルダを分けると良いと思います。

値を入れた例としてはこんな感じです。

//前提
class UserDBContext : DBContext { ... }
class RoleDBContext : DBContext { ... }
dotnet ef migrations add Ver_2_0 --context UserDBContext --output-dir Migrations/UserDB
dotnet ef migrations add Ver_2_0 --context RoleDBContext --output-dir Migrations/RoleDB

この後のupdateコマンドなども同様に、contextオプションを指定します。

dotnet ef database update --context <DBContext派生型のクラス名>

値を入れた例だとこうなります。

dotnet ef database update --context UserDBContext
dotnet ef database update --context RoleDBContext

EF Coreはサンプル通りに動かすだけならサンプルのコマンドをコピペするだけでも動きますが、ちゃんと使っていくと理解するべきところが増えてきます。1つずつ調べていきましょう。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?