まとめ: Entity Framework Code First が生成するデータベース名
毎度、msdn の記事を読み直さないといけないのでまとめる。
msdn - 接続とモデル
Entity Framework Code First が生成するデータベース名は次の要素で決まる。
- 構成ファイル Web.config/App.config の「接続文字列名」
- DbContext の「クラス名」
- DbContext コンストラクタに渡す「文字列型の引数」
次の組み合わせが考えられる。
#5 は Database/Model First による接続で、かつ既設のデータベースへの接続になるが参考までに。
# | 接続文字列名 | DbContext クラス名 | コンストラクタ引数 | 生成するデータベース名 |
---|---|---|---|---|
1 | なし | 任意の名前 | なし | クラスの完全修飾名 *a |
2 | なし | 任意の名前 | 任意の名前 | コンストラクタ引数名 |
3 | あり | 接続文字列名と同じ | なし | 接続文字列に定義された名前 |
4 | あり | 接続文字列名と異なる | 接続文字列名と同じ | 接続文字列に定義された名前 *b |
5 | あり *c | 任意の名前 | 接続文字列名と同じ | - *d |
*a: SQL Server Express か LocalDb が使われ、Express 優先とあるが、VS 2015 + SQL Server 2014 環境で試すと LocalDb として作成された。
*b: 引数を name=接続文字列名
形式で指定した場合、構成ファイルに等しい接続文字列名がないと例外がスローされる。
*c: EDMX ファイル内の情報の検出方法が含まれる特殊な接続文字列を指定する
*d: 接続文字列名に定義された既設のデータベースに接続する。Code First として機能するのではない。
その他
-
DbModelBuilder
でも Code First モデルを構築できる、未調査。 - DbContext の文字列引数には、データベース名、接続文字列名以外にも接続文字列自体を渡すことができる。
- 作成済みの DbConnection を DbContext のコンストラクタに渡して、そのコネクションを使用できる。
- 同様に作成済みの ObjectContext を DbContext のコンストラクタに渡して使用できる。
確認した環境
- Visual Studio Community 2015
- ASP.NET MVC 5.2.3
- Entity Framework 6.1.3
- SQL Server Express LoalDb 12.0.2000.8