初心者向けに Entity Framework を使ってデータベースに接続する方法を解説します。
はじめて Entity Framework に触れる人や、C#を始めてデータベースに接続してみたい人向けです。
この記事で分かること
- Entity Frameworkのインストール
- エンティティクラスの作り方
- DbContextの作り方
.net Framework4.8で行っています。.NETを使う場合はこの記事は当てはまらないかもしれません。(Entity Framework Core が推奨されると思います。)
サンプルプロジェクトの作成
Visual Studio を開き、[新しいプロジェクトの作成]に進みます。
[コンソールアプリ(.net Framework)]を選択します。
プロジェクト名を入力して、今回は .net Framework4.8 で作成します。(私は”EfSample”というプロジェクト名にしました。)

Nugetを使ってEntitiy Frameworkをインストールする
[NuGetパッケージマネージャー]を開きます。

検索から「Entity Framework」を選択します。

インストールプロジェクトを選択して、インストールします。(画像では”EfSample”プロジェクトを作成しています。)

ライセンスに同意します。

次にインストールされていることを確認します。
「Entitiy Framework.SqlServer」はデフォルトで一緒にインストールされます。SqlServerを使わない場合は削除できますが、依存関係に注意しましょう。分からなければ、そのままにしておいて大丈夫です。

エンティティクラスを作成する
今回はCode Firstで開発を行います。名前のとおり、エンティティクラスを先に定義(コードを書く)して、そこからデータベースを作成します。エンティティクラスはモデルクラスとも呼ばれます。
まずはこれらエンティティクラスを入れるためのフォルダを作りましょう。プロジェクトを右クリックして、[追加] – [新しいフォルダー]を選びます。”Models”という名前のフォルダ-を作ります。

作成した[Models]フォルダを右クリックして、今回は”Product“クラスというものを追加します。

Product クラスは以下のように定義します。
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
// 製作者クラスをプロパティに持つ。まだ製作者クラスを作っていないのでエラーになっています。
// 他のエンティティクラスをもつ場合は virtual を付けます。
public virtual Staff Creater { get; set; }
}Product クラスには Staff クラスのプロパティを持つことにしましょう。このプロダクトを作った製作者の情報という想定です。
また、上のコードにあるように他のエンティティクラスを持つ場合には virtual で指定する必要があります。
それでは Staff クラスを定義しましょう。先ほどと同じように [Models] フォルダーに “Staff”クラスを追加します。
public class Staff
{
public int Id { get; set; }
public string Name { get; set; }
}“Id”がつくプロパティは「主キー」として扱われます。
Entity Frameworkによって、IDENTITY属性が追加され、行が追加されるごとに値が自動で採番されます。
参考:コード優先規則 – EF6 | Microsoft Learn(https://learn.microsoft.com/ja-jp/ef/ef6/modeling/code-first/conventions/built-in#primary-key-convention)
DbContextの作成
DbContextクラスを追加します。データベースへの窓口みたいなものですね。
[Models]フォルダーに、[ADO.NET Entity Data Model]を追加します。名前は”ProductDbContext”としておきましょう。

[空のCode Firstモデル]を選択します。

“ProductDbContext”クラスが作られます。

このクラスに、用意したエンティティクラスのプロパティを用意します。DbSet<T>はエンティティのコレクションを表します。
これらプロパティを通してデータにアクセスすることになります。
public class ProductDbContext : DbContext
{
public ProductDbContext()
: base("name=ProductDbContext")
{
}
// 以下のように追加
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Staff> Staffs { get; set; }
}App.configファイルを開くと、データベースに接続する接続文字列を確認できます。
<connectionStrings>
<add name="ProductDbContext" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=EfSample.Models.ProductDbContext;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>一度ビルドしてエラーがないことを確認しましょう。
エラーがなければ準備完了です。
最初にデータアクセスした際に、データベースファイルができますので、この段階ではまだデータベースファイルは作られていません。
次回はデータの追加方法を解説します。