【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

特集:Visual Studio 2008 SP1新機能解説(2)

.NETの新データアクセス・テクノロジ「ADO.NET Entity Framework」

WINGSプロジェクト ナオキ/山田 祥寛
2008/11/28
Page1 Page2 Page3 Page4


新機能がてんこ盛りの「Visual Studio 2008 SP1」レビュー
VS 2008 SP1新機能解説(1)「ASP.NET Dynamic Data」

Entity Framework概要

 Visual Studio 2008 SP1(以降、VS 2008 SP1)によるアップデートでは、新たなデータアクセス・テクノロジとして「ADO.NET Entity Framework」(以降、Entity Framework)が追加された。本稿ではこのEntity Frameworkの概要と、その活用方法について解説する。

■Entity Framework登場の背景

 Entity Frameworkの中身を解説する前に、まずはデータアクセスにおける従来技術の問題点について確認しておこう。

 現在では、オブジェクト指向プログラミングとリレーショナル・データベース(RDB)を組み合わせた開発は一般的な方式である。しかしながら、オブジェクト指向により抽象化したオブジェクト・モデルとデータベースのテーブル構造とは、そもそもの構造が異なる。

 オブジェクト指向に基づいてデータベース・アクセスを行おうとする場合、例えばINSERT命令を発行するには、データベースに格納すべき値をオブジェクトから取り出し、INSERT命令を動的に組み立てる必要がある(1つのオブジェクトをテーブル内の1レコードに対応させる場合)。逆に、SELECT命令でデータベースから取り出した結果セットは、オブジェクトを生成してから、結果セット内の各値を対応するオブジェクトのプロパティに代入しなければならない。

 このような相互マッピングのためのコードは、実に企業アプリケーション全体の3〜7割まで占めるともいわれ、開発生産性を低下させる一因ともなっている。このような問題を「インピーダンス・ミスマッチ」という。


図1 異なるデータモデルが引き起こす「インピーダンス・ミスマッチ」

 このようなインピーダンス・ミスマッチを解消する技術として、これまで定番とされてきたものが「O/Rマッピング(Object/Relational Mapping)」である。O/Rマッピングとは、その名のとおり、オブジェクトとRDB(のテーブル)とを結び付けることをいう。具体的には、クラスのプロパティとテーブル上のフィールド(テーブルの列)とをマッピングする。前述したように、オブジェクトとRDBのテーブルとの間には構造上のギャップが存在するが、このギャップを機械的に埋めようというのがO/Rマッピングの考え方だ。

 もっとも、従来のO/Rマッピング技術では、オブジェクト指向のクラスをRDBのテーブルに1対1でマッピングしていたにすぎない。ここで問題となるのが、データベースは高度に正規化されているという点だ。

 例えば書籍情報データベースを考えてみよう。正規化を考慮して設計すると、実際には書籍の基本的な情報(書名やページ数、刊行日など)はbookテーブルに、著者情報(著者名や住所、経歴など)はauthorテーブルに、出版社情報(出版社名や住所、会社情報など)はpublishテーブルに……というように、アプリケーション側からすれば情報が分散されていることになる。つまり、書名と著者名と出版社名が必要となる場合、アプリケーション側では、毎回、分散されている情報に対して「結合」(Join)という処理を行わなければいけなかったわけだ。

 もちろん、これはアプリケーション側からすれば、極めて「面倒な」ことだ。また、そもそもアプリケーションがデータベースの構造(データの持ち方)を意識しなければならないということは、それだけデータベースの変更に影響を受けやすいということを意味する。

 しかし、書名、著者名、出版社名といったプロパティを持つ「書籍エンティティ」があらかじめ用意されていたとしたらどうだろう(エンティティとは、ここではオブジェクトとほぼ同義であると考えて構わない)。アプリケーションからは、書籍エンティティにアクセスすることで、「結合」などというRDB固有の事情に振り回されることなく、より直感的に必要な情報を取得することが可能になる。もちろん、エンティティという皮を1枚かぶせることで、RDB側のスキーマ変更――特にテーブルの分割/統合のような変化にもより耐性が高まることになる。

 Entity Frameworkとは、要は、このようなエンティティを定義し、データベースへアクセスするための手段を提供する技術であると考えればよいだろう。

■Entity Data Modelとは?

 より具体的に、Entity Frameworkの中身を見ていこう。

 Entity Frameworkを実際に利用するには、「ADO.NET Entity Data Model」(以下、EDM)を利用することになる。このEDMこそ、Entity Frameworkの一番のキモであり、実際の開発における最重要項目となる。EDMは、次の3つの要素で構成されている。

  • CSDL(Conceptual Schema Definition Language:概念スキーマ定義言語)
  • MSL(Mapping Schema Language:マッピング・スキーマ言語)
  • SSDL(Storage Schema Definition Language:ストア・スキーマ定義言語)

 SSDLはRDBとの1対1のマッピング情報(=ストア・スキーマ)を、CDSLはエンティティが持つプロパティ情報(=概念スキーマ)を、それぞれ定義するものだ。そして、MSLはこれらCSDLとSSDLをマッピング(橋渡し)する役割を担っている(図2)。VS 2008 SP1では、「Entityデザイナ」を利用することで、EDMの定義をGUI画面から直感的に行うことができる。


図2 Entity Frameworkが行うストア・スキーマと概念スキーマのマッピング

 このように定義したEDMに対しては、クエリ(後述しているが、Entity SQLやObject SQLなどがある)を発行することにより必要なデータを得ることができるが、これにはEntity Client/Object Servicesというデータ・プロバイダを利用する。

 EDMに対して発行されたクエリは、LINQ to SQLと同様にRDBで実行される。EDMでは、記述されたクエリを同等のSQLクエリに変換し、データベースに送信し、処理するわけだ。


図3 Entity Framework全体像
EDMに対して問い合わせを行うには、Entity Client/Object Servicesというデータ・プロバイダを使用する。Entity SQL、Object SQL、LINQ to EntitiesはいずれもEDMに対する問い合わせ言語(技術)の一種(詳細は後述)。

■Entity Framework対応のデータ・プロバイダ

 現時点でVS 2008 SP1で提供されるEntity Framework用のデータ・プロバイダは、SQL Serverのみをサポートしている。SQL Server以外のデータ・プロバイダについては、現在のところ、Devart社(米国)がOracle/MySQL/PostgreSQL対応のものを販売している。それぞれ149.95〜249.95ドルとなっているが、トライアル版も提供されているので、それらのデータベースでもしEntity Frameworkを使うのであれば、導入を検討してみるとよいだろう。

 ほかにも、米IBM、米OpenLink Software、米Sybaseなどの企業が、Firebird、DB2、Informix Dynamic Server、SQLite、SQL Anywhere、Sybase、VistaDBなどのサポートを表明している。ただし、Oracleから提供されているODP.NETは、現在のところEntity Framework対応を明言していない。

 以上大まかではあるが、Entity Frameworkの全体像をつかんでいただけたかと思う。以降は実際にEntityデザイナを利用してEDMを設定する方法、そして、実際にアプリケーションからEDMにアクセスする方法について解説する。


 INDEX
  Visual Studio 2008 SP1新機能解説(1)
  DBアプリをコーディングレスで構築する「ASP.NET Dynamic Data」
    1.Dynamic Dataアプリケーションの基本
    2.データ・モデルの作成/Global.asaxの編集
    3.メタデータ編集によるDynamic Dataアプリケーションのカスタマイズ
    4.自作ユーザー・コントロールの利用/ページ・テンプレートのカスタマイズ
 
  Visual Studio 2008 SP1新機能解説(2)
  .NETの新データアクセス・テクノロジ「ADO.NET Entity Framework」
  1.ADO.NET Entity Framework概要
    2.Entity Data Model(EDM)の作成と利用
    3.EDMに対するクエリの利用方法(Entity SQL)
    4.EDMに対するクエリの利用方法(Object Services/LINQ to Entities)
 
  Visual Studio 2008 SP1新機能解説(3)
  RESTスタイルのWebサービスを手軽に公開する「ADO.NET Data Services」
    1.ADO.NET Data Services概要/対応するクライアント
    2.サンプル − ADO.NET Data Servicesの公開
    3.ASP.NET AJAX環境のデータを取得/追加する

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?