ページ

2006年6月24日土曜日

ADO.NET vNext

ADO.NET vNext っていうのは ADO.NET の次のバージョンのことです。Orcas といっしょにリリースされるんだと思います。一部では ADO.NET 3.0 と呼ばれてたりもします。


ADO.NET vNext: The Entity Framework, LINQ and more
今までの ADO.NET は SqlConnection とか Sql Command とかデータベースとやり取りするためのクラスライブラリでしたが、ADO.NET vNext ではそういったローレベルだけでなく、抽象化したもっとハイレベルのレイヤも受け持つようになるようです。


そのハイレベルのレイヤっていうのは、ようするに O/R マッピングのことみたいです。データベース上のスキーマ (テーブルやビュー) はリレーショナルデータベースにむいたような構造にしてやらなくちゃいけないことが多いですし、そのままクラス / オブジェクトとして表現してもいまいちな場合が多いです。そこで、データベース上のスキーマとは別にクラス向き (オブジェクト指向向きと言ったらいいのかな?) のモデルを作ってやって、それらをマッピングしておけばいいだろうということです。で、このモデルを定義するための規則が ADO.NET Entity Data Model っていうやつみたいです。ADO.NET Tech Preview: Entity Data Model に Entity Data Model の詳細が書かれています。で、この枠組み全体を ADO.NET Entity Framework とかって呼んでるみたいです。


Next-Generation Data Access: Making the Conceptual Level Real こちらの資料にちょっと具体的な感じがありますが、真ん中チョイ下くらいの 「Making the Conceptual Level Real」 のところの 「Build the Conceptual Model」 がエンティティデータモデルで書いたモデルの例みたいです。XML で書かれてますが、とうぜん Visual Studio 上ではデザイナが提供されるんでしょう。そして、「Figure 7」 にあるような感じでデータベース上のスキーマとモデルとのマッピングを行い、これらからクラスが自動生成されるそうです。


モデルから作成されたクラス (オブジェクト) は、マッププロバイダ経由で使うようです。具体的には MapConnection、MapCommand といったクラスが用意されていて、SQL でアクセスできます。ただ、普通のリレーショナルデータベースとは違うので普通の SQL では機能が足らず Entity SQL というのが定義されているようです。The ADO.NET Entity Framework Overview とかに Entity SQL について書かれています。


ADO.NET vNext screencast
こちらにスクリーンキャストがあります (英語)。
普通に ADO.NET 3.0 と言ってますね。あと、CTP は夏の後半に出るとかなんとか。
最初は普通に ADO.NET 2.0 でアクセスするコードを書いてます。それをマッププロバイダ (MapConnection、MapCommand) と Entity SQL を使ってアクセスするように改造していっています。モデルは事前に作ってあったのを使っているみたいです。モデルをデザインやマッピングなどをどういう風にやるのか見てみたかったんですが、その辺は出てきません (というか、まだデザイナが無くて XML をガリガリ書かないといけないから見せられない、と想像してみる(^^; )。そして、さらにそのコードを LINQ を使うように書き換えていっています。最後で insert や update に相当することもできるというのもデモしてます。また、このときにデータベース上では複数のテーブルが一つのクラスへとマップされている場合に、オブジェクトを更新するとちゃんとそれぞれのテーブルを更新する SQL が自動的に発行される様子をプロファイラを使って見せています。


エンティティデータモデルもおもろいですが、LINQ を使った時点でマッププロバイダとかを気にする必要がほとんどなくなっちゃうとこもかなりおもしろく感じました。相手がデータベースなのか ADO.NET Entity Framework なのかは LINQ の中で勝手にうまいことやってくれるので、コード上はたいした違いはないっていうことですね。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。