Entity Framework CoreのモデルとDbContextの作成 (SQL Serverを使用) - C#

Entity Framework CoreのモデルとDbContextを作成します。
この記事ではデータベースにSQL Server を利用する場合の手順を紹介します。

概要

既に存在しているSQL Serverのデータベースのテーブルからモデルを作成する手順を紹介します。
メモ
データベースにSQLiteを利用する場合の手順はこちらの記事を参照してください。

事前準備

Entity Framework Coreのインストール

Entity Framework CoreとEntity Framework Core SQL Server をインストールします。詳細な手順はこちらの記事を参照してください。

Entity Framework Core Design のインストール

Microsoft.EntityFrameworkCore.Design パッケージをインストールします。


インストールすると、ソリューションエクスプローラーでプロジェクトの依存関係のパッケージの項目に"Microsoft.EntityFrameworkCore.Design"が追加されます。



NuGetパッケージマネージャーコンソールで次のコマンドを実行してインストールすることもできます。
Install-Package Microsoft.EntityFrameworkCore.Design 

Entity Framework Core Tools のインストール

Microsoft.EntityFrameworkCore.Toolsパッケージをインストールします。



NuGetパッケージマネージャーコンソールで次のコマンドを実行してインストールすることもできます。
Install-Package Microsoft.EntityFrameworkCore.Tools

データベースの接続文字列の取得

データベースの接続文字列を取得します。
サーバーエクスプローラーに新しいデータ接続を追加し、データベースの接続を作成します。 詳細な手順はこちらの記事を参照してください。
接続作成後、サーバーエクスプローラーでデータ接続のノードをクリックして選択し、プロパティウィンドウの[接続文字列]の値をコピーすることで、 接続文字列を取得できます。

データベースのスキャフォールディング : DbContext のコード生成

NuGetパッケージマネージャーのコンソールで、次のコマンドを実行し、DbContextのコードを生成します。
Scaffold-DbContext '(データベースの接続文字列)' Microsoft.EntityFrameworkCore.SqlServer


コマンドを実行すると、データベースに存在するテーブルに対する (テーブル名).cs(データベース名)Context.csファイルが作成されます。


(テーブル名).cs ファイルにはテーブル構造を反映したクラスのコードが生成されています。


また、(データベース名)Context.cs ファイルにはDbContextを派生したContextクラスのコードが生成されます。

補足
Scaffold-DbContextコマンドの実行で「信頼されていない機関によって証明書チェーンが発行されました。」 エラーが発生する場合はこちらの記事を参照してください。

テーブルの値

今回のデモでは、以下の値が記録されている ProductsB テーブルを使用します。
ProductsBテーブル
idmodelnameclasscategoryprice
1C-XM01モーダンチェアホームチェア56000
2X-XD05ラージデスクオフィステーブル87000
3A-DA40ラウンドダイニングチェアホームチェア28000
4O-XX100ナチュラルオフィスオフィスチェア13800
5R-D400ラウンドダイニングテーブルホームテーブル128000
6R7000ウッドキャビネットオフィスその他32000
7B-200リネンベッドホームベッド184500
8B-250ホワイトダブルベッドホームベッド324850
9W-80ワーキングチェアオフィスチェア45000
10EG-10Xエルゴノミクスデスクオフィステーブル88500
11OC-908オーガニックチェアホームチェア56000

プログラム

データベースから、モデルとDbContextが生成できましたので、プログラムを実装します。
Windows Formアプリケーションを作成します。

UI

下図のフォームを作成します。ボタンが複数配置されていますが、今回利用するボタンは1つ(button1)のみです。

コード

以下のコードを記述します。button1のClickイベントを実装しています。
namespace SimpleEntityFrameworkCoreSqlServer
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      IPentecSandBoxContext cx = new IPentecSandBoxContext();
      IEnumerable<ProductsB> result = cx.ProductsBs;
      foreach (ProductsB pb in result) {
        textBox1.Text += string.Format("{0:d} - {1} / {2} / {3} / {4} - {5:g}\r\n", pb.Id, pb.Name.Trim(), pb.Model.Trim(), pb.Category.Trim(), pb.Class.Trim(), pb.Price);
      }
    }
  }
}

解説

データベースコンテキストオブジェクトを作成します。コンテキストオブジェクトは先の手順で、スキャフォールディングで自動生成されたコードのオブジェクトです。
  IPentecSandBoxContext cx = new IPentecSandBoxContext();

テーブルのデータを取得します。テーブルのデータタイプはテーブル名であるため、(今回の例では、ProductsB)テーブルのデータは、 テーブル名にsを付加した、ProductsBsプロパティで表現されています。
テーブルのすべてのレコードがIEnumerable<ProductsB>result に代入されます。
  IEnumerable<ProductsB> result = cx.ProductsBs;

foreachループでレコードの値をテキストボックスに表示します。
  foreach (ProductsB pb in result) {
    textBox1.Text += string.Format("{0:d} - {1} / {2} / {3} / {4} - {5:g}\r\n", pb.Id, pb.Name.Trim(), pb.Model.Trim(), pb.Category.Trim(), pb.Class.Trim(), pb.Price);
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[Select All]のボタン(button1)をクリックします。レコードの値がテキストボックスに表示されます。
データベースのテーブルから値を読み込み、テキストボックスに表示できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-03-22
作成日: 2022-11-24
iPentec all rights reserverd.