Règles et sémantique du chemin d'accès aux ressources (ADO.NET Data Services Framework)
Ce document décrit les différents chemins pouvant être construits en utilisant les règles et la sémantique du chemin d'accès aux ressources ADO.NET Data Services. Il note également les contraintes spécifiques relatives à un élément donné du chemin d'accès aux ressources.
Règles
Les règles suivantes s'appliquent à tout segment d'un chemin d'accès aux ressources :
Si un jeu d'entités ne se trouve pas dans le conteneur d'entités par défaut, l'adresse doit être formée à l'aide de la syntaxe suivante :
/ServiceName/<EntityContainer>/<EntitySet>
. Si des segments sont composés d'un chemin d'accès qui identifie un jeu d'entités dans le même conteneur que le premier jeu indiqué dans le chemin d'accès, le jeu n'a pas besoin d'être précédé d'un nom de conteneur.L'ordre des clés dans un prédicat de clé composée est important. Un client doit organiser les valeurs de clés dans une clé composée dans le même ordre que celui où elles apparaissent dans la description CSDL (Conceptual Schema Definition Language) d'un service de données. Pour plus d'informations, consultez Schéma conceptuel (CSDL).
Aucun segment de chemin d'accès supplémentaire n'est autorisé après : /$links/<segment>. Par exemple : un segment de chemin d'accès ne peut pas exister après
'BestFriend'
dans l'URI :http://host/service.svc/Person(1)/$links/BestFriend
. La présence de tout segment de chemin d'accès supplémentaire entraîne l'envoi d'une réponse 400 (Requête incorrecte).Aucune option de requête commençant par
$
, telle que$filter
, n'est autorisée à être présente sur toute requête à un URI qui renvoie à un lien utilisant$links
. La présence d'une telle option de requête entraîne l'envoi d'une réponse 400 (Requête incorrecte). Remarque : les options de requête non ADO.NET qui ne commencent pas par$
sont valides.Dans tous les cas qui utilisent la syntaxe suivante, une propriété de lien peut se substituer à une propriété de navigation
Dans tous les cas qui utilisent la syntaxe suivante, la première occurrence d'un jeu d'entités dans un segment de chemin d'accès peut se substituer à une opération de service.
Sémantique
La sémantique pour le jeu de base des URI ADO.NET Data Services est indiquée dans la liste suivante des types de syntaxe URI. Vous pouvez combiner ces cas de base pour composer des URI plus longs. Chaque exemple d'URI est suivi de la syntaxe LINQ équivalente.
URI : serviceName/<jeu d'entités>
Cette syntaxe représente toutes les instances d'un type d'entité dans le jeu d'entités indiqué. Le jeu peut avoir 0, 1 ou plusieurs instances du type d'entité.
Exemple :
Cet exemple obtient tous les clients dans le jeu d'entités Customers
:
https://www.contoso.com/dataservice.svc/Customers
Syntaxe LINQ équivalente :
from c in Customers
select c
URI : serviceName/<jeu d'entités>(keyPredicate)
Cette syntaxe représente l'instance du type d'entité dont la clé est égale au prédicat de clé et se trouve dans le jeu d'entités spécifié.
Exemple :
Cet exemple obtient le client identifié par la clé ALFKI
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')
Syntaxe LINQ équivalente :
(from c in Customers
where c.keyProperty == "ALFKI"
select c).First()
URI : serviceName/<jeu d'entités>(keyPredicate)/<Type complexe>
Cette syntaxe représente l'instance de type complexe dans le type d'entité spécifié dont la clé est égale au prédicat de clé et se trouve dans le jeu d'entités spécifié.
Exemple :
Cet exemple obtient l'adresse du client identifié par la clé ALFKI
dans le jeu d'entités Customers
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address
Syntaxe LINQ équivalente :
(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType).First()
URI : ServiceName/<jeu d'entités>(KeyPredicate)/<Type complexe>/<Propriété>
Cette syntaxe représente la propriété portant sur un type complexe dans l'instance du type d'entité dont la clé est égale au prédicat de clé et se trouve dans le jeu d'entités spécifié.
Un URI se terminant dans une propriété peut ajouter un segment /$value
. Le segment $value
agit comme un opérateur de déréférencement et indique que seule la valeur de la propriété doit être retournée sans métadonnée ou syntaxe voisine supplémentaire.
Exemple :
Cet exemple obtient l'adresse du client identifié par la clé ALFKI
dans le jeu d'entités Customers
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name
Cet exemple est le même que l'exemple précédent mais il représente la valeur de la propriété exempte de toute métadonnée voisine. Par exemple, si un URI a spécifié une image .jpg
, l'URI peut être inclus directement comme valeur de l'attribut SRC
dans une balise HTML IMG
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name/$value
Syntaxe LINQ équivalente :
(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType.Property).First()
URI : serviceName/<jeu d'entités>(KeyPredicate)/<Propriété>
Cette syntaxe représente la propriété de l'instance du type d'entité dont la clé est égale au prédicat de clé et se trouve dans le jeu d'entités spécifié.
Un URI se terminant dans une propriété peut ajouter un segment /$value
. $value
agit comme un opérateur de déréférencement et indique que seule la valeur de la propriété doit être retournée sans métadonnée ou syntaxe voisine supplémentaire.
Exemple :
Cet exemple obtient le nom du client identifié par la clé ALFKI
dans le jeu d'entités Customers
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName
Cet exemple est le même que l'exemple précédent mais il représente la valeur de la propriété exempte de toute métadonnée voisine. Par exemple, si un URI a spécifié une image .jpg
, l'URI peut être inclus directement comme valeur de l'attribut SRC
dans la balise HTML IMG
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName/$value
Syntaxe LINQ équivalente :
(from c in Customers
where c.keyProperty == "ALFKI"
select c.Property).First()
URI : serviceName/<jeu d'entités>(KeyPredicate)/<NavigationProperty>
Cette syntaxe représente un jeu d'entités qui contient une collection de zéros à plusieurs instances d'un type d'entité. Le jeu d'entités contient uniquement des instances qui sont associées avec l'instance du type d'entité dans le segment de chemin d'accès précédent.
Exemple :
Cet exemple obtient toutes les Orders
pour le Customer
identifié par la clé ALFKI
:
https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Orders
Syntaxe LINQ équivalente :
from c in Customers
from c2 in c.RelatedEntitySet
where c.keyProperty == "ALFKI"
select c2
Syntaxe LINQ alternative :
Db.Customers.Where(c => p.keyProperty.Equals("ALFKI")).SelectMany(c => c.RelatedEntitySet);
Voir aussi
Concepts
Spécifications HTTP courantes (ADO.NET Data Services Framework)