実践 Entity Framework ~ Entity 作成
Entity Framework を利用して、Code First で開発。
前回はコードファーストでデータベースが作成されることを確認しました。今回は、同じくコードファーストでテーブルを作成してみましょう。
次のような都道府県テーブルを作ってみます。
コード | 名称 | カナ |
---|---|---|
01 | 北海道 | ホッカイドウ |
02 | 青森県 | アオモリケン |
... | ... | ... |
コードと名称だけの至ってシンプルな構造です。
まぁこれだけあっても使い道ないですが、徐々に・・・
POCO Entity クラス
コードファーストということで、コードから先に書きます。
テーブルを表すクラスを作成します。場所は何処でも構わないのですが・・・1ソリューション1webアプリケーション構成にしているので、Modelsフォルダの中に作成してみましょう。
クラス名はテーブル名
クラス名はテーブルの名前を指定します。
テーブルの名前は、Prefectures としてみましょう。
public class Prefecture { }
「Prefecture」という単数形のクラス名を指定すると、「Prefectures」という複数形の名称を持つテーブルが作成されます。この辺りはまた後ほど。
プロパティ名はフィールド名
クラスには、get,setを持つプロパティを作成します。
プロパティ名はフィールド名とします。
public string Code { get; set; } public string Name { get; set; } public string Kana { get; set; }
ちなみにこのようなシンプル構造のクラス(オブジェクト)に関して、通称「POCO」と呼ばれています。
もともとは、Java の POJO (Plain Old Java Object) からの変化版ですが、
『Java を C に変えたら「ポコ」になるで』
「ぽこって・・・ええんとちゃうか!でもVBどーすんねん」
『ポヴォ?・・・それやったら C じゃなくて、CLR(Common Language Runtime, 共通言語ランタイム)にしたらどう?』
「あったまえーやん!それでいこっ!」
きっとそんなやり取りは・・・ないと思いますが。詳細気になる方は調べてください。
コンテキストに追加
コードからテーブルにアクセスするために、コンテキストにもコードを追加します。
以前作成した、DbContext クラスから派生した、AddressDataContext クラスに次を追加します。
public DbSet<Prefecture> Prefectures { get; set; }
DbSet、DbContext ともに System.Data.Entity 名前空間に存在するので、ついでに次を追加しています。
using System.Data.Entity;
テーブルエンティティクラスの型指定された DbSet<TEntity> を利用することになります。それを DbContext クラスで公開する必要があるということですが・・・
このあたりは実際利用すると意味も解りますので、とりあえず。
なお、このプロパティ名はコード内のみで利用するものなので、実際のテーブル名と合わせる必要はありません。DbSet<TEntity> の TEntity 部のクラス名が重要になります。
マイグレーション
今回の変更点をもとに、データベースを再構築する必要があります。再構築するための足場を組む必要がありますが、その作業は、以前紹介した、「Add-Migration」で行います。
失敗の理由は?
名称を「CreatePrefecture」として、いざ実行!
Add-Migration CreatePrefecture
・・・あれれ
怒られてしまいました・・・
内容を見ると「キーが定義されていません」となっていますね。
そうなのです。テーブルには必ずキーが必要なのです。
さて、そのキーはどのように定義するのでしょうか?
続きはこちらで。