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

Entity Framework を利用して、ADO.NET Entity Data Model を作成して利用するプログラムを紹介します。
補足
Code First を利用した手順はこちらの記事を参照してください。

概要

ADO.NET Entity Data Modelを作成すると、データベースのテーブルの構造と同じクラス構造(モデル)が自動的に作成され、データベースのレコードと対応します。モデルがインスタンス化されると、データベースとの同期が実行されるため、モデルのインスタンスを生成するだけで、データベースへの接続などを意識せず、簡単にデータベースのレコードへアクセスできます。
モデルの作成方法にはビジュアルなモデルデザイナを利用する「EF Designer」を利用する方法と、モデルのコードを生成する「Code First」の2つの方法があります。この記事では、デザイナを利用してモデルを編集する"EF Designer" を利用する手順を紹介します。

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

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

プログラム例

Windows Formアプリケーションを作成します。フォームにボタンと複数行のテキストボックスを配置します。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像1

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

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

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

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

[モデルのコンテンツの選択]画面が表示されます。今回は"データベースから EF Designer"の項目をクリックして選択します。選択後ダイアログ下部の[次へ]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像6

[データ接続の選択]画面が表示されます。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像7

ダイアログ上部のコンボボックスからデータベースへの接続を選択します。データベースへの接続が無い場合は[新しい接続]ボタンをクリックしデータベースの接続を作成します。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像8

データベースへの接続を選択すすると、認証が必要な接続の場合は、接続文字列に認証情報を含めるかのラジオボタンが有効になります。接続文字列に認証情報を含めるか選択します。今回は認証情報を接続文字列に含めることにするため、[はい、重要情報を接続文字列に含めます。]のラジオボタンをチェックします。チェック後[次へ]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像9

[データベース オブジェクトと設定の選択]画面が表示されます。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像10

[テーブル]ノードの[dbo]ノード内の先に作成したテーブル[ProductsA]テーブルのノードの左側のチェックボックスをクリックしてチェックを付けます。また、ウィンドウ下部の[モデル名前空間]にモデルの名前空間を入力します。今回はデフォルトで設定された名称 "iPentecSandBoxModel" を利用します。設定ができたら[完了]ボタンをクリックします。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像11

モデルの生成が始まります。途中、下図の[セキュリティ警告]ダイアログが表示されます。[OK]ボタンをクリックして処理を続行します。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像12

モデルの生成が完了すると下図のデザイン画面が表示されます。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像13

コードの記述

先に作成したフォームの[Button1]のClickイベントに処理を記述します。
下記のコードを記述します。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像14
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 SimpleEntityFrameworkDemoEFDesigner
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      iPentecSandBoxEntities entity = new iPentecSandBoxEntities();
      foreach (var p in entity.ProductsA) {
        textBox1.Text += p.name.Trim() + "\r\n";
      }
    }
  }
}

解説

DbContext クラスから派生した、生成されたモデルオブジェクトのインスタンスを作成します。
  iPentecSandBoxEntities entity = new iPentecSandBoxEntities();

モデルオブジェクトのテーブル名のプロパティにレコードの一覧が保存されています。foreach ループによりProductsAテーブルのレコードの値を取得しテキストボックスに表示します。
  foreach (var p in entity.ProductsA) {
    textBox1.Text += p.name.Trim() + "\r\n";
  }

実行結果

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

[button1]をクリックします。テキストボックスに下図の文字列が表示されます。先に作成したProductsA テーブルのレコードのname列の値がテキストボックスに表示できていることが確認できます。
ADO.NET Entity Data Model を作成して利用する (EF Designer を利用したEntity Data Model):画像16

Entity Framework を利用してデータベースからレコードの値を取得できました。

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