lycheejam's tech log

チラ裏のメモ帳 | プログラミングは苦手、インフラが得意なつもり。

C# EntityFrameworkでDbContextクラスを作成する。

概要

DB接続用のDbContextクラスを継承したクラスを作成します。 対象のEntityクラスはこちらの記事で作成した護衛艦クラスを使用します。

目次

DbContextクラスの作成

下記画像のようにデータ項目の中にあるADO.NET Entity Data Modelを選択します。
今回はプロジェクト直下にファイルを作成していますが、任意の場所で構わないです。

f:id:HM_Atlas:20180520014001p:plainf:id:HM_Atlas:20180520014009p:plain

今回はShipsDbContext命名し作成します。

追加を押下するとセットアップウィザートが立ち上がってくるので下記画像のように
空のCodeFirstモデルを選択します。そして完了を押下

f:id:HM_Atlas:20180520014049p:plain

接続するEntityの定義

作成後、自動でDbContextクラスを継承したShipsDbContextクラスが作成されます。

//コメント省略
public class ShipsDbContext : DbContext {
    public ShipsDbContext()
        : base("name=ShipsDbContext")
    }
}

作成済みのEntityクラスをDbSet<T>のプロパティとして定義します。
SelfDefenseShipsSelfDefenseShipを格納するテーブル(語弊がある)となります。

public class ShipsDbContext : DbContext {
    public ShipsDbContext()
        : base("name=ShipsDbContext")
    }
    public DbSet<SelfDefenseShip> SelfDefenseShips { get; set; }
    public DbSet<EscortFlotilla> EscortFlotillas { get; set; }
    public DbSet<EscortDivision> EscortDivisions { get; set; }
    public DbSet<HullCode> HullCodes { get; set; }
    public DbSet<ShipClass> ShipClasses { get; set; }
}

基本的に定義するプロパティは複数形とします。

接続文字列の確認

自動で接続用文字列が追加されます。
<connectionStrings>が追加されていることを確認してください。

  • プロジェクト/App.config
 <connectionStrings>
    <add name="ShipsDbContext" connectionString="data source=省略;initial catalog=省略;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

DBにテーブルを作成

ビルドして実行してください。DBにテーブルが作成されます。
オブジェクトブラウザからDBにテーブルが作成されていることが確認出来ます。

f:id:HM_Atlas:20180521215031p:plainf:id:HM_Atlas:20180521215035p:plain

※スクショ撮るためにテーブルを消してから再作成しているので最初からプロジェクトのスキーマが存在しているかは不明です。

「オブジェクトブラウザー 表示」とかでググると幸せになれるかも

以上