インクリメンタルなカイハツにっき

.NET 開発手法を中心に、これから始める方の一助となる記事を載せていく予定です。

実践 Entity Framework ~ Entity 作成

Entity Framework を利用して、Code First で開発。
前回はコードファーストでデータベースが作成されることを確認しました。今回は、同じくコードファーストでテーブルを作成してみましょう。

次のような都道府県テーブルを作ってみます。

コード 名称 カナ
01 北海道 ホッカイドウ
02 青森県 アオモリケン
... ... ...

コードと名称だけの至ってシンプルな構造です。
まぁこれだけあっても使い道ないですが、徐々に・・・

POCO Entity クラス

コードファーストということで、コードから先に書きます。
テーブルを表すクラスを作成します。場所は何処でも構わないのですが・・・1ソリューション1webアプリケーション構成にしているので、Modelsフォルダの中に作成してみましょう。

クラス名はテーブル名

クラス名はテーブルの名前を指定します。
テーブルの名前は、Prefectures としてみましょう。

public class Prefecture
{
}

Table Entity class

「Prefecture」という単数形のクラス名を指定すると、「Prefectures」という複数形の名称を持つテーブルが作成されます。この辺りはまた後ほど。

プロパティ名はフィールド名

クラスには、get,setを持つプロパティを作成します。
プロパティ名はフィールド名とします。

public string Code { get; set; }
public string Name { get; set; }
public string Kana { get; set; }

POCO

ちなみにこのようなシンプル構造のクラス(オブジェクト)に関して、通称「POCO」と呼ばれています。
もともとは、JavaPOJO (Plain Old Java Object) からの変化版ですが、

Java を C に変えたら「ポコ」になるで』
「ぽこって・・・ええんとちゃうか!でもVBどーすんねん」
『ポヴォ?・・・それやったら C じゃなくて、CLR(Common Language Runtime, 共通言語ランタイム)にしたらどう?』
「あったまえーやん!それでいこっ!」

きっとそんなやり取りは・・・ないと思いますが。詳細気になる方は調べてください。

コンテキストに追加

コードからテーブルにアクセスするために、コンテキストにもコードを追加します。
以前作成した、DbContext クラスから派生した、AddressDataContext クラスに次を追加します。

public DbSet<Prefecture> Prefectures { get; set; }

DbContextに追加

DbSet、DbContext ともに System.Data.Entity 名前空間に存在するので、ついでに次を追加しています。

using System.Data.Entity;

テーブルエンティティクラスの型指定された DbSet<TEntity> を利用することになります。それを DbContext クラスで公開する必要があるということですが・・・
このあたりは実際利用すると意味も解りますので、とりあえず。
なお、このプロパティ名はコード内のみで利用するものなので、実際のテーブル名と合わせる必要はありません。DbSet<TEntity> の TEntity 部のクラス名が重要になります。

マイグレーション

今回の変更点をもとに、データベースを再構築する必要があります。再構築するための足場を組む必要がありますが、その作業は、以前紹介した、「Add-Migration」で行います。

失敗の理由は?

名称を「CreatePrefecture」として、いざ実行!

Add-Migration CreatePrefecture

Add-Migration

・・・あれれ

20150606104046

怒られてしまいました・・・
内容を見ると「キーが定義されていません」となっていますね。
そうなのです。テーブルには必ずキーが必要なのです。
さて、そのキーはどのように定義するのでしょうか?

続きはこちらで。