Semántica y reglas de rutas de acceso de recursos (marco de trabajo de los servicios de datos de ADO.NET)

Este documento describe las distintas rutas de acceso que se pueden construir mediante el uso de la semántica y las reglas de rutas de acceso de recursos de los servicios de datos de ADO.NET. Además, destaca las restricciones específicas de un elemento concreto de la ruta de acceso del recurso.

Reglas

Las siguientes reglas se aplican a cualquier segmento de una ruta de acceso de recurso:

  • Si un conjunto de entidades no está en el contendor de entidades predeterminado, la dirección se debe formar mediante el uso de la siguiente sintaxis: /ServiceName/<EntityContainer>/<EntitySet>. Si los segmentos se forman en una ruta que identifique un conjunto de entidades del mismo contendor que el primer conjunto indicado de la ruta, ningún nombre de contenedor debe preceder al conjunto.

  • El orden de las claves de un predicado de clave compuesto es importante. Un cliente debe organizar los valores de clave de una clave compuesta en el mismo orden en el que aparecen en la descripción del lenguaje de definición de esquemas conceptuales (CSDL) de un servicio de datos. Para obtener más información, vea Esquema conceptual (CSDL).

  • No se permiten más segmentos de ruta de acceso detrás de: /$links/<segment>. Por ejemplo: no puede existir ningún segmento de ruta de acceso detrás de 'BestFriend' en el URI: http://host/service.svc/Person(1)/$links/BestFriend. La presencia de cualquier segmento de ruta de acceso adicional tiene como resultado una respuesta 400 Solicitud incorrecta.

  • No se permite la presencia de opciones de consulta que empiecen por $, como $filter, en ninguna solicitud a un URI que direccione un vínculo mediante $links. La presencia de una opción de consulta tal genera una respuesta 400 Solicitud incorrecta. Nota: no son válidas las opciones de consulta de ADO.NET que no empiecen por $.

  • En todos los casos en los que se use la sintaxis siguiente, se puede sustituir una propiedad de vínculo por una de navegación

  • En todos los casos en los que se use la sintaxis siguiente, la primera aparición de un conjunto de entidades de un segmento de ruta de acceso se puede sustituir por una operación de servicio.

Semántica

La semántica del conjunto base de los URI de los servicios de datos de ADO.NET se especifica en la siguiente lista de tipos de sintaxis de URI. Puede combinar estos casos base para formar URI más largos. A cada ejemplo de URI le sigue la sintaxis LINQ equivalente.

URI: nombreDeServicio/<conjunto de entidades>

Esta sintaxis representa todas las instancias de un tipo de entidad del conjunto de entidades especificado. El conjunto puede tener 0, 1 o muchas instancias de tipo de entidad.

Ejemplo:

Este ejemplo obtiene todos los clientes del conjunto de entidades Customers:

https://www.contoso.com/dataservice.svc/Customers

Sintaxis LINQ equivalente:

from c in Customers 
select c

URI: nombreDeServicio/<conjunto de entidades>(keyPredicate)

Esta sintaxis representa la instancia de tipo cuya clave es igual que el predicado de clave y está en el conjunto de entidades especificado.

Ejemplo:

Este ejemplo obtiene el cliente identificado por la clave ALFKI:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')

Sintaxis LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c).First()

URI: nombreDeServicio/<conjunto de entidades>(keyPredicate)/<Tipo complejo>

Esta sintaxis representa la instancia de tipo complejo en el tipo de entidad especificado cuya clave es igual al predicado de clave y está en el conjunto de entidades especificado.

Ejemplo:

Este ejemplo obtiene la dirección del cliente identificado por la clave ALFKI en el conjunto de entidades Customers:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address

Sintaxis LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType).First()

URI: nombreDeServicio/<conjunto de entidad>(KeyPredicate)/<Tipo complejo>/<Propiedad>

Esta sintaxis representa la propiedad de un tipo complejo en la instancia del tipo de entidad especificado cuya clave es igual al predicado de clave y está en el conjunto de entidades especificado.

Un URI que finalice en una propiedad se puede anexar a un segmento /$value. El segmento $value actúa como un operador de eliminación de referencias e indica que sólo se debe devolver el valor de la propiedad sin metadatos adicionales ni sintaxis adyacente.

Ejemplo:

Este ejemplo obtiene la dirección del cliente identificado por la clave ALFKI en el conjunto de entidades Customers:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name

Este ejemplo es el mismo que el anterior, pero representa el valor de la propiedad sin metadatos adyacentes. Por ejemplo, si un URI ha especificado una imagen .jpg, el URI se podría incluir directamente como el valor del atributo SRC de una etiqueta HTML IMG:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Address/Name/$value

Sintaxis LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c.ComplexType.Property).First()

URI: nombreDeServicio/<conjunto de entidades>(KeyPredicate)/<Propiedad>

Esta sintaxis representa la propiedad de la instancia de tipo de entidad cuya clave es igual que el predicado de clave y está en el conjunto de entidades especificado.

Un URI que finalice en una propiedad puede anexar un segmento /$value. $value actúa como operador de eliminación de referencias e indica que sólo se debe devolver el valor de la propiedad sin metadatos adicionales ni sintaxis adyacente.

Ejemplo:

Este ejemplo obtiene el nombre del cliente identificado por la clave ALFKI en el conjunto de entidades Customers:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName

Este ejemplo es el mismo que el anterior, pero representa el valor de la propiedad sin metadatos adyacentes. Por ejemplo, si un URI ha especificado una imagen .jpg, se podría incluir directamente como el valor del atributo SRC de la etiqueta HTML IMG:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/CustomerName/$value

Sintaxis LINQ equivalente:

(from c in Customers
where c.keyProperty == "ALFKI"
select c.Property).First()

URI: nombreDeServicio/<conjunto de entidades>(KeyPredicate)/<PropiedadDeNavegación>

Esta sintaxis representa un conjunto de entidades que contiene una colección de cero a varias instancias de un tipo de entidad. El conjunto de entidades sólo contendrá instancias asociadas con la instancia de tipo de entidad en el segmento de ruta de acceso previo.

Ejemplo:

Este ejemplo obtiene todos los elementos Orders del elemento Customer identificado mediante la clave ALFKI:

https://www.contoso.com/dataservice.svc/Customers('ALFKI')/Orders

Sintaxis LINQ equivalente:

from c in Customers
from c2 in c.RelatedEntitySet 
where c.keyProperty == "ALFKI"
select c2

Sintaxis LINQ alternativa:

Db.Customers.Where(c => p.keyProperty.Equals("ALFKI")).SelectMany(c => c.RelatedEntitySet);

Vea también

Conceptos

Requisitos HTTP comunes (marco de trabajo de los servicios de datos de ADO.NET)