Model(以下EDM)の生成である。Frameworkの理想は、まず概念モデルの設計があり、そこからデータベースの実装を行うことにあるといえる。現時点での開発においては、データベース設計が先にあり、プログラミング用のモデルとして概念モデルを後で設計するケースも多いだろう。Frameworkのデータベース自動生成機能がシンプルな構造にしか対応していないことから、自動生成をあきらめ、データベースからEDMを生成するケースも考えられる。このように、既存のデータベースを解析し、モデルを生成することを、一般にデータベースのリバース(リバース・エンジニアリングの略)と呼ぶ。Studioの機能を使用することで、簡単なウィザードにより、データベースからのリバース処理を行える。何度も実行する機能であるため、しっかり手順を確認していこう。2010をベースに解説を行っている。今回作成するサンプルのダウンロード(ef4basic_4_sample.zip)データベースからのEDM生成それでは、前回までに自動生成してきたデータベースから、リバースにより新たにEDMを作成してみよう。今回はデータベース上にテーブルだけでなく、ストアド・プロシージャが存在するケースでEDM生成機能を試してみる。ストアド・プロシージャはリスト1のようなSQL文を記述して実行することにより作成できる。このストアド・プロシージャは、名前と年齢を引数に取り、指定された名前のエントリの年齢を更新するものである。Model]を選択して、再度「AddressBook.edmx」という名前でEDMを作成する。Modelウィザードが表示される。今回はデータベースからのリバースのため、左の[データベースから生成]を選ぼう。Modelウィザード今回はデータベースからのリバースのため、左の[データベースから生成]を選択する。Serverに接続するための接続文字列が選択されているはずなので、[次へ]を選択する。オブジェクトの選択]ページ(図4)は重要である。Server上に存在するテーブルやビュー、ストアド・プロシージャが一覧表示され、EDMに含めるオブジェクトを選択できる。ここではCategories、Entries、EntryCategoryの3つのテーブルと、update_ageストアド・プロシージャを選択しよう。オブジェクトの選択]ページデータベース上のオブジェクトが一覧表示される。ここで[生成されたオブジェクトの名前を複数化または単数化する]というチェック・ボックスに注目したい。Frameworkより、エンティティ名の単数形、テーブル名の複数形がサポートされたことに触れたが、データベースからのリバースの際にも、単数/複数形がサポートされている。このチェック・ボックスをチェックしない状態(デフォルト)では、エンティティ名はテーブル名と同じになるが、このチェック・ボックスをチェックすると、テーブル名が複数形の場合は、エンティティ名は単数形で生成される。今回の例では、チェックしない状態では「Categories」と「Entries」というエンティティ・クラスが生成されるのに対し、チェックすると「Category」と「Entry」というエンティティ・クラスが生成される。クラス名を単数形とする一般的な命名則から考えると、このチェック・ボックスはチェックするのが望ましいだろう。データベース・オブジェクトの命名則として、英語表記を基本にしている開発者にとって、これは好ましい改善点である。[完了]ボタンをクリックすると、データベースからのリバース処理が行われ、図5のようなEDMの構造が表示される。データベースからのリバースで生成されたEDM生成されたEDMを確認すると、エンティティ間のアソシエーションの接続性が両方とも「*」になっている(=多対多)中間テーブルであるEntryCategoryテーブルに対応するエンティティが存在しないナビゲーション・プロパティの名前がEntries、Categoriesと、両方とも複数形などから、多対多関係がきちんと再現されていることが確認できる。このように、データベースからのリバースの際には、データベース上の外部キーなどの情報を元に、適切な構造が構築される。以上の流れでデータベースからのリバースによるEDMの生成を行うことができた。データベースからのリバース処理は1回に限られておらず、EDM→データベース、データベース→EDM両方の変換を何度でも実行できる。その場合、更新されたエンティティやテーブルの情報が相互に反映されるようになっている。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。