![]() |
連載: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入門」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -







