Entity Framework CoreのモデルとDbContextを作成します。
この記事ではデータベースにSQL Server を利用する場合の手順を紹介します。
既に存在しているSQL Serverのデータベースのテーブルからモデルを作成する手順を紹介します。
Entity Framework CoreとEntity Framework Core SQL Server をインストールします。詳細な手順はこちらの記事を参照してください。
Microsoft.EntityFrameworkCore.Design パッケージをインストールします。
インストールすると、ソリューションエクスプローラーでプロジェクトの依存関係のパッケージの項目に"Microsoft.EntityFrameworkCore.Design"が追加されます。
NuGetパッケージマネージャーコンソールで次のコマンドを実行してインストールすることもできます。
Install-Package Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Toolsパッケージをインストールします。
NuGetパッケージマネージャーコンソールで次のコマンドを実行してインストールすることもできます。
Install-Package Microsoft.EntityFrameworkCore.Tools
データベースの接続文字列を取得します。
サーバーエクスプローラーに新しいデータ接続を追加し、データベースの接続を作成します。
詳細な手順はこちらの記事を参照してください。
接続作成後、サーバーエクスプローラーでデータ接続のノードをクリックして選択し、プロパティウィンドウの[接続文字列]の値をコピーすることで、
接続文字列を取得できます。
NuGetパッケージマネージャーのコンソールで、次のコマンドを実行し、DbContextのコードを生成します。
Scaffold-DbContext '(データベースの接続文字列)' Microsoft.EntityFrameworkCore.SqlServer
コマンドを実行すると、データベースに存在するテーブルに対する (テーブル名).cs
と(データベース名)Context.cs
ファイルが作成されます。
(テーブル名).cs
ファイルにはテーブル構造を反映したクラスのコードが生成されています。
また、(データベース名)Context.cs
ファイルにはDbContextを派生したContextクラスのコードが生成されます。
今回のデモでは、以下の値が記録されている ProductsB テーブルを使用します。
id | model | name | class | category | price |
---|---|---|---|---|---|
1 | C-XM01 | モーダンチェア | ホーム | チェア | 56000 |
2 | X-XD05 | ラージデスク | オフィス | テーブル | 87000 |
3 | A-DA40 | ラウンドダイニングチェア | ホーム | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | オフィス | チェア | 13800 |
5 | R-D400 | ラウンドダイニングテーブル | ホーム | テーブル | 128000 |
6 | R7000 | ウッドキャビネット | オフィス | その他 | 32000 |
7 | B-200 | リネンベッド | ホーム | ベッド | 184500 |
8 | B-250 | ホワイトダブルベッド | ホーム | ベッド | 324850 |
9 | W-80 | ワーキングチェア | オフィス | チェア | 45000 |
10 | EG-10X | エルゴノミクスデスク | オフィス | テーブル | 88500 |
11 | OC-908 | オーガニックチェア | ホーム | チェア | 56000 |
データベースから、モデルとDbContextが生成できましたので、プログラムを実装します。
Windows Formアプリケーションを作成します。
下図のフォームを作成します。ボタンが複数配置されていますが、今回利用するボタンは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)をクリックします。レコードの値がテキストボックスに表示されます。
データベースのテーブルから値を読み込み、テキストボックスに表示できました。