ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model)

ADO.NET Entity Data Model を作成して利用する手順を紹介します。 Entity Data Model はCode First を利用した作成になります。

補足1
EF Designer を利用した手順はこちらの記事を参照してください。
補足2
Entity Framework Core を利用する場合の手順はこちらの記事を参照してください。

概要

ADO.NET Entity Data Modelを作成すると、データベースのテーブルの構造と同じクラス構造(モデル)が自動的に作成され、データベースのレコードと対応します。モデルがインスタンス化されると、データベースとの同期が実行されるため、モデルのインスタンスを生成するだけで、データベースへの接続などを意識せず、簡単にデータベースのレコードへアクセスできます。

モデルの作成方法にはビジュアルなモデルデザイナを利用する「EF Designer」を利用する方法と、モデルのコードを生成する「Code First」の2つの方法があります。この記事では、コードを生成する"Code First" を利用する手順を紹介します。

事前準備(データベースの準備)

ADO.NET Entity Data Model を作成する基になるデータベースとテーブルを作成します。

ProductAテーブル
列名データ型Null許容その他
idintFalse主キー
namenchar(128)True
pricedecimal(18, 0)True
categorynchar(10)True


ProductAテーブル レコード
idnamepricecategory
1Penguin500Bird
2Bear1050Mammal
3Duck150Bird
4Camel550Mammal
5Owl185Bird
6Whale880Mammal

プログラム例

Visual StudioでWindows Formアプリケーションを作成します。

UI

フォームにボタンとMultilineプロパティをTureに設定した、複数行のテキストボックスを配置します。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像1

データモデルの作成

ソリューションエクスプローラのウィンドウでプロジェクトのノードをクリックして選択します。選択状態で右クリックします。ポップアップメニューが表示されますので、[追加]メニューの[新しい項目]をクリックします。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像2

[新しい項目の追加]ダイアログボックスが表示されます。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像3

左側のツリービューで[Visual C# アイテム]ノードの子ノードの[Data]ノードをクリックして選択します。右側のエリアの項目リストから[ADO.NET Entity Data Model]の項目をクリックして選択します。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像4

ダイアログ下部の[名前]テキストボックスにデータモデルの名称を入力します。今回はProductAテーブルのデータモデルのため、"ProductAModel"とします。設定ができたらダイアログ右下の[追加]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像5

[モデルのコンテンツの選択]ダイアログが表示されます。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像6

[モデルに含めるコンテンツ]のリストの[データベースから Code First]の項目をクリックして選択します。選択ができたら[次へ]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像7

[データ接続の選択]ダイアログが表示されます。[アプリケーションがデータベースへの接続に使用するデータ接続]のコンボボックスを開いて接続を選択します。接続が無い場合は[新しい接続]ボタンをクリックしてデータベースへの接続を作成します。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像8

コンボボックスでデータ接続を選択すると、認証が必要な接続の場合は認証情報を接続文字列に含めるかを設定するラジオボタンが有効になります。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像9

今回は認証情報を接続文字列内に含めるため、[はい、重要情報を接続文字列に含めます]のラジオボタンをクリックしてチェックします。チェック後[次へ]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像10

[データベース オブジェクトと設定の選択]ダイアログが表示されます。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像11

[モデルに含めるデータベース オブジェクト]のツリービューの[テーブル]ノードを開き子ノードの[dbo]ノードを開きます。テーブルの一覧が表示されますので、今回利用する[ProductA]テーブルの項目の左側のチェックボックスをクリックしてチェックを付けます。チェックを付けましたら、[完了]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像12

データベースのテーブルから、データモデルが作成されます。データモデルが作成されると、データモデルの名称に設定した、"ProductAModel"の名称と同じ名称の "ProductAModel.cs" ファイルがプロジェクトに追加されます。 ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像13

コード

下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SimpleEntityFrameworkDemoCodeFirst
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ProductAModel model = new ProductAModel();

      foreach (var p in model.ProductsA) {
        textBox1.Text += p.name.Trim() + "\r\n";
      }
    }
  }
}

解説

DbContextクラスを継承したデータモデルオブジェクトのインスタンスを作成します。

  ProductAModel model = new ProductAModel();


データモデルオブジェクトのテーブル名のプロパティにレコードの値が格納されています。foreach文を利用して格納されているレコードの値を順番に取得してnameフィールドの値をテキストボックスに表示します。

  foreach (var p in model.ProductsA) {
    textBox1.Text += p.name.Trim() + "\r\n";
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像14

[button1]をクリックします。ProductsAテーブルのレコードのnameフィールドの値がテキストボックスに表示されることが確認できます。
ADO.NET Entity Data Model を作成して利用する (Code First を利用したEntity Data Model):画像15

ADO.NET Entity Data Model を作成してデータモデルを利用してテーブルのレコードの値を取得できました。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2018-09-11
Copyright © 1995–2025 iPentec all rights reserverd.