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許容 | その他 |
id | int | False | 主キー |
name | nchar(128) | True | |
price | decimal(18, 0) | True | |
category | nchar(10) | True | |
ProductAテーブル レコード
id | name | price | category |
1 | Penguin | 500 | Bird |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 550 | Mammal |
5 | Owl | 185 | Bird |
6 | Whale | 880 | Mammal |
プログラム例
Visual StudioでWindows Formアプリケーションを作成します。
UI
フォームにボタンとMultilineプロパティをTureに設定した、複数行のテキストボックスを配置します。
データモデルの作成
ソリューションエクスプローラのウィンドウでプロジェクトのノードをクリックして選択します。選択状態で右クリックします。ポップアップメニューが表示されますので、[追加]メニューの[新しい項目]をクリックします。
[新しい項目の追加]ダイアログボックスが表示されます。
左側のツリービューで[Visual C# アイテム]ノードの子ノードの[Data]ノードをクリックして選択します。右側のエリアの項目リストから[ADO.NET Entity Data Model]の項目をクリックして選択します。
ダイアログ下部の[名前]テキストボックスにデータモデルの名称を入力します。今回はProductAテーブルのデータモデルのため、"ProductAModel"とします。設定ができたらダイアログ右下の[追加]ボタンをクリックします。
[モデルのコンテンツの選択]ダイアログが表示されます。
[モデルに含めるコンテンツ]のリストの[データベースから Code First]の項目をクリックして選択します。選択ができたら[次へ]ボタンをクリックします。
[データ接続の選択]ダイアログが表示されます。[アプリケーションがデータベースへの接続に使用するデータ接続]のコンボボックスを開いて接続を選択します。接続が無い場合は[新しい接続]ボタンをクリックしてデータベースへの接続を作成します。
コンボボックスでデータ接続を選択すると、認証が必要な接続の場合は認証情報を接続文字列に含めるかを設定するラジオボタンが有効になります。
今回は認証情報を接続文字列内に含めるため、[はい、重要情報を接続文字列に含めます]のラジオボタンをクリックしてチェックします。チェック後[次へ]ボタンをクリックします。
[データベース オブジェクトと設定の選択]ダイアログが表示されます。
[モデルに含めるデータベース オブジェクト]のツリービューの[テーブル]ノードを開き子ノードの[dbo]ノードを開きます。テーブルの一覧が表示されますので、今回利用する[ProductA]テーブルの項目の左側のチェックボックスをクリックしてチェックを付けます。チェックを付けましたら、[完了]ボタンをクリックします。
データベースのテーブルから、データモデルが作成されます。データモデルが作成されると、データモデルの名称に設定した、"ProductAModel"の名称と同じ名称の "ProductAModel.cs" ファイルがプロジェクトに追加されます。
コード
下記のコードを記述します。
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";
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。ProductsAテーブルのレコードのnameフィールドの値がテキストボックスに表示されることが確認できます。
ADO.NET Entity Data Model を作成してデータモデルを利用してテーブルのレコードの値を取得できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2018-09-11