連載:Entity Framework 4.1入門 第1回 EF 4.1の目玉機能「コード・ファースト」を理解しよう WINGSプロジェクト 土井 毅(監修:山田 祥寛)2011/06/03 |
|
|
●モデルを使ったサンプルの実装
今回は、ItemクラスとMemberクラスのモデルを1つずつ新規作成して登録し、その後、登録した情報をコンソールに出力するだけの、シンプルなサンプルである。
なお、以下のコードは基本的にデータベース・ファーストやモデル・ファーストの場合でもそのまま動作するものである。
|
||
リスト4 データの登録、表示を行うサンプル(上:Program.cs、下:Module1.vb) |
エンティティ・クラスの使用方法はEF 4までと同じく、実際のアクセスはコンテキスト・クラスを介して行う()。基本的なコードは似通っているため、EF 4でのサンプルと比較してほしい。
なお、コンテキスト・クラスが以前のObjectContextクラスからDbContextクラスに変わっているため、作成したエンティティの追加が、AddTo○○メソッド(○○はエンティティ・クラス名)やAddObjectメソッド(POCOのエンティティ・クラスの場合)ではなく、コンテキスト・クラスでDbSet型として定義したコレクション(Items/Membersプロパティ)のAddメソッドに変わっている()。
データの取得には、EF 4までの場合と同様にLINQを用いている()。ここではItemクラスのプロパティに加え、遅延ロードを用いてMemberクラスのプロパティも出力していることに注目してほしい()。
以上が、EF 4.1のコード・ファースト開発スタイルでデータの保存、取得を行うサンプルである。ビルド後の実行結果は図6のようになる。
図6 サンプルの実行結果 |
●データベース上のデータの確認
それでは、以上のソース・コードが、規約によってどのようなデータベースに変換されるのか、実際のデータを確認してみよう。SQL ServerにアクセスするためのSQL Server Management Studioなどを使い、SQL Server Expressのデータベース一覧を確認すると、図7のようにデータベースとテーブルが作成されていることが確認できる。
図7 自動生成されたデータベースとテーブル |
今回は設定ファイル(App.config)に接続文字列を定義しなかったため、規約に沿ってコンテキスト・クラスの完全修飾名である「EFCodeFirstSampleCS.ItemCatalog」という名前(C#の場合。VBの場合は「EFCodeFirstSampleVB.ItemCatalog」)でデータベースが作成されている。
また、エンティティ・クラスに対応するItems、Membersというテーブルも生成されている。Itemsテーブル、Membersテーブルの内容は、図8、図9のようになっており、ソース・コードで記述したのと同じデータが保存されていることが確認できる。
図8 Itemsテーブルの内容 |
図9 Membersテーブルの内容 |
さらに、図10のようにItemsテーブルからMembersテーブルへのリレーションシップも自動的に作成されている。規約に沿って外部キーとしてMemberIdフィールドが使われている。キャプチャ画像は省略するが、MembersテーブルからItemsテーブルへのリレーションシップも同様に作成されている。
図10 ItemsテーブルからMembersテーブルへのリレーションシップ。外部キーはMemberIdフィールド |
以上、データベースの構造が最初に触れた規約どおりの定義となっていることに注目してほしい。さらに詳細な規約と実際の挙動については次回解説するが、今回はコード・ファーストによって簡潔なコードでデータベースを使ったアプリケーションを構築できる、という点を押さえておこう。
[コラム]SQL Server Compact 4.0を使用する場合 | |||
前述のとおり、EFのコード・ファーストでは、規約に沿った接続文字列を記述しない場合、デフォルトのデータベースとしてSQL Server Expressを使用するようになっている。SQL Server Compact 4.0を使用する場合は、プロジェクトの設定ファイルに以下のように記述する。
ここでは、規約に従ってコンテキスト・クラス名と同じ、「ItemCatalog」という名前の接続文字列を定義している。providerNameプロパティに「System.Data.SqlServerCe.4.0」という値を指定することで、SQL Server Compact 4.0を使うように設定している。実際のデータ・ファイルは、「bin/Debug/ItemCatalog.sdf」など、実行時のフォルダに保存される。 |
■まとめ
連載初回となる今回は、「EF 4.1のコード・ファースト開発スタイルが、データベース・ファーストやモデル・ファーストとどのように異なるのか」を解説した。また、CoCが非常に有効に働くため、実際のコードが非常にシンプルであることも確認できた。ASP.NET MVCと同様、これまでのマイクロソフトのプロダクトとはやや毛色が異なるフレームワークである、と感じられるかもしれない。
次回は、EF 4.1のコード・ファーストで使用されている規約の詳細や、規約に沿わない場合の明示的な設定方法について解説する。
INDEX | ||
[連載]Entity Framework 4.1入門 | ||
第1回 EF 4.1の目玉機能「コード・ファースト」を理解しよう | ||
1.Entity Framework 4.1の概要 | ||
2.環境構築/コード・ファーストによるサンプルの実装:モデルの定義 | ||
3.モデルを使ったサンプルの実装/データベース上のデータの確認 | ||
「連載:Entity Framework 4.1入門」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|