このドキュメントでは、ADO.NET Data Services リソース パスの規則とセマンティクスを使用して構成できるさまざまなパスについて説明します。また、リソース パスの特定の要素に固有の制約についても記述します。
規則
リソース パス内のセグメントには次の規則が適用されます。
エンティティ セットが既定のエンティティ コンテナ内にない場合、アドレスは
/ServiceName/<EntityContainer>/<EntitySet>の構文を使用して指定する必要があります。セグメントで構成されたパスが、そのパス内に記述されている最初のセットと同じコンテナ内にあるエンティティ セットを識別する場合、そのセットの前にコンテナ名を付ける必要はありません。複合キー述語内のキーの順序は意味を持ちます。クライアントは、複合キー内のキー値をデータ サービスの概念スキーマ定義言語 (CSDL) の記述と同じ順序で指定する必要があります。詳細については、「概念スキーマ (CSDL)」を参照してください。
/$links/<セグメント> の後にパス セグメントを続けることはできません。たとえば、URI
http://host/service.svc/Person(1)/$links/BestFriendの'BestFriend'の後にさらにパス セグメントを指定することはできません。さらにパス セグメントを指定すると、"400 正しくない要求" の応答が返されます。$linksを使用してリンクをアドレス指定する URI への要求で、$filterなどの$で始まるクエリ オプションを使用することはできません。このようなクエリ オプションを指定すると、"400 正しくない要求" の応答が返されます。メモ :$で始まっていない ADO.NET 以外のクエリ オプションは有効です。次の構文を使用しているすべてのケースでは、リンク プロパティをナビゲーション プロパティの代わりに使用できます。
次の構文を使用しているすべてのケースでは、パス セグメント内の最初のエンティティ セットをサービス操作の代わりに使用できます。
セマンティクス
ADO.NET Data Services の URI における基本セットのセマンティクスは、次の URI 構文の種類一覧に示されています。これらの基本ケースを組み合わせて長い URI を作成できます。各 URI 例の後には、同等の LINQ 構文が記載されています。
URI : serviceName/<エンティティ セット>
この構文は、指定したエンティティ セット内のエンティティ型のすべてのインスタンスを表します。このセットには、0、1、または複数のエンティティ型インスタンスを含めることができます。
例 :
この例は、Customers エンティティ セット内のすべての顧客を取得します。
https://www.contoso.com/dataservice.svc/Customers
同等の LINQ 構文 :
from c in Customers
select c
URI : serviceName/<エンティティ セット>(keyPredicate)
この構文は、キーがキー述語と等しく、指定したエンティティ セット内にある、エンティティ型インスタンスを表します。
例 :
この例は、キー ALFKI で識別される顧客を取得します。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')
同等の LINQ 構文 :
(from c in Customers
where c.keyProperty == "ALFKI"
select c).First()
URI : serviceName/<エンティティ セット>(keyPredicate)/<複合型>
この構文は、キーがキー述語と等しく、指定したエンティティ セット内にある、指定したエンティティ型の複合型インスタンスを表します。
例 :
この例は、Customers エンティティ セット内のキー ALFKI で識別される顧客の住所を取得します。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address
同等の LINQ 構文 :
(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType).First()
URI : ServiceName/<エンティティ セット>(KeyPredicate)/<複合型>/<プロパティ>
この構文は、キーがキー述語と等しく、指定したエンティティ セット内にある、エンティティ型インスタンス内の複合型のプロパティを表します。
プロパティで終わっている URI には /$value セグメントを追加できます。$value セグメントは逆参照演算子として機能し、追加のメタデータや周囲の構文がないプロパティ値のみを返す必要があることを示します。
例 :
この例は、Customers エンティティ セット内のキー ALFKI で識別される顧客の住所を取得します。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name
この例は前の例と同じですが、周囲のメタデータがないプロパティ値を表します。たとえば、URI で .jpg イメージを指定している場合は、この URI を IMG HTML タグの SRC 属性の値として直接含めることができます。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name/$value
同等の LINQ 構文 :
(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType.Property).First()
URI : serviceName/<エンティティ セット>(KeyPredicate)/<プロパティ>
この構文は、キーがキー述語と等しく、指定したエンティティ セット内にある、エンティティ型インスタンスのプロパティを表します。
プロパティで終わっている URI には $value セグメントを追加できます。$value は逆参照演算子として機能し、追加のメタデータや周囲の構文がないプロパティ値のみを返す必要があることを示します。
例 :
この例は、Customers エンティティ セット内のキー ALFKI で識別される顧客の名前を取得します。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName
この例は前の例と同じですが、周囲のメタデータがないプロパティ値を表します。たとえば、URI で .jpg イメージを指定している場合は、この URI を IMG HTML タグの SRC 属性の値として直接含めることができます。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName/$value
同等の LINQ 構文 :
(from c in Customers
where c.keyProperty == "ALFKI"
select c.Property).First()
URI : serviceName/<エンティティ セット>(KeyPredicate)/<ナビゲーション プロパティ>
この構文は、エンティティ型の 0 から複数のインスタンスのコレクションを含むエンティティ セットを表します。エンティティ セットには、前のパス セグメント内のエンティティ型インスタンスと関連付けられているインスタンスのみが含まれます。
例 :
この例は、キー ALFKI で識別される Customer の Orders すべてを取得します。
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Orders
同等の LINQ 構文 :
from c in Customers
from c2 in c.RelatedEntitySet
where c.keyProperty == "ALFKI"
select c2
代替 LINQ 構文 :
Db.Customers.Where(c => p.keyProperty.Equals("ALFKI")).SelectMany(c => c.RelatedEntitySet);