Frameworkを使用する方法について考えたい。Frameworkが自動生成する次の2種類のクラスである。エンティティ・クラスオブジェクト・コンテキスト・クラス自動生成されたクラスはEDMのファイル名にDesigner.cs(C#の場合)、Designer.vb(VBの場合)を付加した名前で保存されている。今回は図10のようにAddressBook.Designer.cs、AddressBook.Designer.vbとして保存されている。これらのファイルは、C#プロジェクトの場合はソリューション・エクスプローラのAddressBook.edmxファイル項目の左側の[+]アイコンをクリックすることで表示できるが、VBプロジェクトの場合はソリューション・エクスプローラの上部の[すべてのファイルを表示]アイコンをクリックする必要がある。EDMを基に自動生成されたクラス(上がC#、下がVB)AddressBook.Designer.cs/AddressBook.Designer.vbファイルとして生成される。VBの場合は上部ツールバーにある[すべてのファイルを表示]アイコンをクリックしないと、それらのファイルは表示されない。それでは自動生成された2つのクラスについて見ていこう。■エンティティ・クラスエンティティ・クラスとは、EDMで定義したエンティティに対応するクラスである。Frameworkを使用する際には、このエンティティ・クラスを介してデータのやりとりを行う。データベースのデータはエンティティ・クラスのインスタンスとして取得できる。エンティティ・クラスのインスタンスの新規作成やプロパティの変更は、データベースへのレコードの挿入、更新などの操作に対応する。Entryエンティティに対応するエンティティ・クラスは、AddressBook.Designer.cs/.vbファイルのEntryクラスとして生成されている(リスト1)。Entryエンティティから生成された「Entityクラス」(抜粋)EDMのプロパティに対応する、C#やVBのプロパティが定義されているのが分かる。ここでは、EDMで定義されたID、Ageといったプロパティがそのままソース・コードとして記述されている。アソシエーション内でナビゲーション・プロパティとして定義したCategoriesプロパティが、EntityCollectionという、コレクション型のプロパティとして定義されていることにも注目したい。このプロパティにアクセスすることで、エントリに関連付けられたカテゴリ(のコレクション)を取得することができる。4からの新機能として、POCO*1をエンティティ・クラスとして使用することもできるようになった。Frameworkに深く依存するクラスとなっている。POCOを使用することにより、エンティティ・クラスをフレームワークに依存しないクラスとすることができる。FrameworkにおけるPOCOの利用については、次回以降で扱う予定である。Object」の略で、特別なクラスやインターフェイスを継承していないクラスのこと。■オブジェクト・コンテキストオブジェクト・コンテキストとは、データベースへのコネクションをカプセル化し、データベースからのデータ取得、エンティティ・クラスへの変更をデータベースへ反映させるなどの機能を持つクラスである。Frameworkを使用する際には、ほとんどの場合、このオブジェクト・コンテキスト・クラスのインスタンス作成から、すべての操作が始まるといってよい。オブジェクト・コンテキストは、EDM上では「エンティティ・コンテナ」という、エンティティすべてを格納する論理グループとして扱われる(正確には、EDMのエンティティ・コンテナが概念として先にあり、それを実装したものがオブジェクト・コンテキストである)。そのため、デフォルトではEDMの名前に「Container」を付加したものがオブジェクト・コンテキスト・クラスの名前として用いられる。次のリスト2は、自動生成されたオブジェクト・コンテキスト・クラスのソース・コードの一部である。オブジェクト・コンテキスト・クラス(抜粋)オブジェクト・コンテキスト・クラスには、各エンティティの集合に相当するプロパティ(Entriesプロパティ)や、新規エンティティを追加するためのメソッド(AddToEntriesメソッド)などが含まれている。エンティティの集合に相当するプロパティは、データのクエリの際に頻繁に使用するので覚えておきたい。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。