データアクセスの方法

.NETマネージド言語からのデータアクセス

ADO.NET Data Services」が提供される。
普通のADO.NETプロバイダとの違いはよくわからないけれども、LINQはサポートされている。
EntityFrameworkに対応しているかどうかは謎。

.NET以外からのデータアクセス

SOAPとRESTのインターフェースを持っているので、それなりのリクエストを投げるとアクセスできる。
ただし、SOAPよりもRESTのサンプルが多いので、MS的にはRESTでアクセスするのをお勧めしている様子。

エンティティの種類

エンティティは2種類に分けられている。

フレキシブルエンティティ

一般的なテーブルのレコードに相当するもの。
サポートされている型は以下のとおり。

  • String
  • Base64Binary
  • Boolean
  • Decimal
  • DateTime

フレキシブルエンティティはバイナリデータを直接扱えないので、Base64Binary型のプロパティに入れることになる。それにしても、あんまり大きいデータを扱うには向いていないので、そんな時にはBLOBエンティティを使う方がよい。

BLOBエンティティ

ざっくり言うと、文字列のカラムとBLOB型のカラムが定義されたテーブルに相当するもの。
バイナリデータをそのまま保存するときは、こちらのエンティティを使う必要がある。
ここまでシンプルだと、DBというよりファイルシステムの代わりに使えるように設計してるんだろうなと個人的に深読みしている。

コンテナにエンティティを入れるときの注意

1つのコンテナの中に、フレキシブルエンティティとBLOBエンティティは混在できない。
フレキシブルエンティティとBLOBエンティティは、それぞれ別のコンテナに入れないといけない。

データベースの構造

普通のリレーショナルデータベースとはそれぞれのオブジェクトの呼び方が違ってる。

オーソリティ

データベースのインスタンスに相当するもの。

コンテナ

データベースのテーブルに相当するもの。
ただし、SDSはスキーマを必要としないので、そのまんまデータベースのテーブルには対応しない。レコードの入れ物程度に考えておいた方がいいかも。

エンティティ

テーブルにあるレコード。つまり、コンテナの中に入っている1件1件のデータ。

「SQL Data Services」って何ですか?

「Azure Services」の一つとして提供されているデータベースの機能。
具体的には、ネットワークデータベース。Amazonでいうところの「SimpleDB」みたいなサービス。
サービスとのやり取りは全てHTTPで行われるので、Windows Azureで動いていないアプリケーションとか、そもそも.NETで作られていないアプリケーションからでもデータにアクセスすることができる。
SQLServerみたいな、一般のリレーショナルDBと同じように使えるかというと、そういうわけではない。なぜならば

  • データベースの構造自体が違っている。
  • クエリの文法とか投げ方がちょっと違う。

こんなところが違うから。
あと、トランザクションとかCommitとかRollbackがあるのかは調べてないからよく分かんない。