Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

まとめ: Entity Framework Code First が生成するデータベース名

More than 5 years have passed since last update.

まとめ: 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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away