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