ADO.NET Data Servicesでのデータ操作
ADO.NET Data Services はRESTfulな実装であるため、アドレス(URL)を通じたデータ操作が可能です。データのCRUD(Create Read Update Delete)は、HTTPのメソッド(Post Get Put Delete)にそれぞれマップされています。上記で行ったブラウザを通じたCategorisエンティティからのデータの取得は、アドレス(URL)下記に対して、HTTPのGetメソッド内部的にリクエストしています。
http://ホストのアドレス/MSStoreSampleDataService.svc/Categories
また、このCategoriesエンティティは下図のような関係性を持っています。
![Categoriesエンティティの関係性](http://cz-cdn.shoeisha.jp/static/images/article/5059/image023.gif)
商品のカテゴリ1つに対して、複数の商品(Products)が存在するように構成されています。
こうした情報をリクエストしてみましょう。これは次のようになります。
http:// ホストのアドレス/MSStoreSampleDataService.svc/Categories(2)/Products
Categories(2)という記述は、Categorisエンティティでキーが2の情報を指しています(今回は「ドレスシャツ」になります)。このアドレスは、ドレスシャツにカテゴライズされる商品(当然ながら複数です)を取得している例になります。結果は以下の図のようにAtomPubの形式で取得できます。
次にデータの削除をテストしてみましょう。下記のアドレスに対してDELETEをリクエストします。
http:// ホストのアドレス/MSStoreSampleDataService.svc/Categories(4)
ブラウザ上で確認するのは困難なため、Fiddlerというツールを使用します。
Fiddlerは「Fiddler Web Debugger」からダウンロード可能です。
RequestBuilderタブにある、Parsedに対して、DELETEであることと、削除するエンティティのアドレスを指定したのち、[Excute]を押します。
結果はエラーになるはずです。
この理由は、Categoriesエンティティは読み取り専用のエンティティとしてアクセスルールを指定したからです。削除を可能とするには、「MSStoreSampleDataService.svc.cs」にある config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
をconfig.SetEntitySetAccessRule("*", EntitySetRights.All);
と修正すれば可能となりますが、本当にデータが消えてしまうため、Categoriesテーブルに適当なデータを追加して、そのデータ削除することをお勧めします。
このように、ADO.NET Data Services はURL操作がデータの操作そのものになるために、クライアントからの利用は、Web操作が可能であれば、言語やテクノロジーを問いません。しかしながら、.NET Frameworkを用いた環境では、URLでのリクエストやAtomPubでのデータをラップしたプロキシクラスを使用した効率のよい開発を行うことが可能です。これはSilverlightアプリケーションにおいても同様です(専用のプロキシクラスが用意されます)。
次回は、Silverlightアプリケーションから、データを取得してXAML上で表示する内容を紹介したいと思います。