Administrar el contexto del servicio de datos (Servicio de datos de WCF)

Gg602811.note(es-es,VS.100).gifNota:
En este tema se describe la nueva funcionalidad en WCF Data Services. Esta nueva funcionalidad admite la versión 3 de Open Data Protocol (OData) y está disponible como actualización en la versión 4 de .NET Framework. Puede descargar e instalar la actualización desde el Centro de Descarga de Microsoft.

La clase DataServiceContext encapsula las operaciones admitidas en un servicio de datos determinado. Los servicios de OData carecen de estado, pero no ocurre lo mismo con el contexto. Por consiguiente, puede usar la clase DataServiceContext para mantener el estado en el cliente entre las interacciones con el servicio de datos para admitir características como la administración de cambios. Esta clase también administra las identidades y realiza el seguimiento de los cambios.

Opciones de combinación y resolución de identidad

Cuando se ejecuta el objeto DataServiceQuery, las entidades de la fuente de respuesta se materializan en objetos. Para obtener más información, vea Materialización de objetos (WCF Data Services). La forma en que las entradas de un mensaje de respuesta se materializan en objetos se basa en la resolución de identidades y depende de la opción de combinación con la que se ejecutó la consulta. Cuando varias consultas o solicitudes de carga se ejecutan en el ámbito de un DataServiceContextúnico, el cliente WCF Data Services solo realiza el seguimiento de una única instancia de objeto que tiene un valor de clave concreto. Esta clave, que se utiliza para realizar la resolución de identidades, identifica una entidad de forma inequívoca.

De forma predeterminada, el cliente solo materializa una entrada de la fuente de respuesta en un objeto para las entidades de las que aún no realiza un seguimiento DataServiceContext. Esto significa que los cambios en los objetos que ya están en la memoria caché no se sobrescriben. Este comportamiento se controla especificando un valor de MergeOption para las consultas y las operaciones de carga. Esta opción se especifica estableciendo la propiedad MergeOption en DataServiceContext. AppendOnly es el valor de la opción de combinación predeterminada. De este modo, solo se materializan los objetos de entidades de las que no se realiza un seguimiento, lo que significa que los objetos existentes no se sobrescriben. Otra manera de evitar que los cambios en los objetos del cliente se sobrescriban con las actualizaciones del servicio de datos es especificar PreserveChanges. Cuando se especifica OverwriteChanges, los valores de los objetos del cliente son reemplazados por los valores más recientes de las entradas de la fuente de respuesta, aunque se hayan realizado cambios en estos objetos. Cuando se utiliza una opción de combinación NoTracking, DataServiceContext no puede enviar los cambios realizados en los objetos de cliente al servicio de datos. Con esta opción, los cambios siempre se sobrescriben con valores del servicio de datos.

Administrar la simultaneidad

OData admite la simultaneidad optimista que permite al servicio de datos detectar conflictos de actualización. El proveedor del servicio de datos se puede configurar de manera que el servicio de datos compruebe los cambios en las entidades mediante un token de simultaneidad. Este token incluye una o más propiedades de un tipo de entidad que el servicio de datos valida para determinar si un recurso ha cambiado. El cliente de WCF Data Services administra los tokens de simultaneidad, que se incluyen en el encabezado eTag de las solicitudes al servicio de datos y las respuestas de este. para obtener más información, vea Actualizar el servicio de datos (WCF Data Services).

DataServiceContext realiza el seguimiento de los cambios realizados en los objetos notificados manualmente utilizando AddObject, UpdateObject y DeleteObject o mediante DataServiceCollection. Cuando se llama al método SaveChanges, el cliente devuelve los cambios al servicio de datos. SaveChanges puede generar un error cuando los cambios de los datos en el cliente están en conflicto con los cambios en el servicio de datos. Cuando esto sucede, debe consultar de nuevo el recurso de entidad para recibir los datos actualizados. Para sobrescribir los cambios en el servicio de datos, ejecute la consulta con la opción de combinación PreserveChanges. Al llamar de nuevo al método SaveChanges, los cambios conservados en el cliente se mantienen en el servicio de datos, siempre que no se hayan realizado otros cambios en el recurso del servicio de datos.

Guardar los cambios

El seguimiento de los cambios se realiza en la instancia de la clase DataServiceContext, pero los cambios no se envían al servidor inmediatamente. Una vez que haya efectuado los cambios necesarios de una actividad determinada, llame al método SaveChanges para enviar todos los cambios al servicio de datos. Se devuelve un objeto DataServiceResponse cuando finaliza la operación SaveChanges. El objeto DataServiceResponse incluye una secuencia de objetos OperationResponse que, a su vez, contienen una secuencia de instancias de EntityDescriptor o LinkDescriptor que representan los cambios que se guardaron o se intentaron realizar. Cuando se crea o modifica una entidad en el servicio de datos, la instancia de la clase EntityDescriptor contiene una referencia a la entidad actualizada, que incluye los valores de propiedad generados por el servidor, como el valor de ProductID generado en el ejemplo anterior. La biblioteca cliente actualiza automáticamente el objeto de .NET Framework para que tenga estos nuevos valores.

En el caso de las operaciones de inserción y actualización correctas, la propiedad de estado del objeto EntityDescriptor o del objeto LinkDescriptor asociado a la operación se establece en Unchanged y los nuevos valores se combinan mediante OverwriteChanges. Cuando una operación de inserción, actualización o eliminación produce un error en el servicio de datos, el estado de la entidad permanece como estaba antes de que se llamara al método SaveChanges y la propiedad Error de OperationResponse se establece en una instancia de DataServiceRequestException que contiene información sobre el error. Para obtener más información, vea Actualizar el servicio de datos (WCF Data Services).

Establecer el método HTTP para las actualizaciones

De forma predeterminada, la biblioteca cliente de .NET Framework envía actualizaciones a las entidades existentes como solicitudes MERGE. Una solicitud MERGE actualiza las propiedades seleccionadas de la entidad; sin embargo, el cliente siempre incluye todas las propiedades en la solicitud MERGE, incluso las propiedades que no hayan cambiado. El protocolo OData también admite el envío de solicitudes PUT para actualizar las entidades. En una solicitud PUT, una entidad existente se reemplaza básicamente por una nueva instancia de la entidad con valores de propiedad desde el cliente. Para usar las solicitudes PUT, establezca la marca del objeto ReplaceOnUpdate de la enumeración SaveChangesOptions cuando se llame a SaveChanges.

Gg602811.note(es-es,VS.100).gifNota:
Una solicitud PUT se comportará de forma distinta que una solicitud MERGE cuando el cliente no conozca todas las propiedades de la entidad. Esto puede ocurrir cuando se proyecte un tipo de entidad en un nuevo tipo en el cliente. También puede ocurrir cuando se hayan agregado nuevas propiedades a la entidad del modelo de datos del servicio y la propiedad IgnoreMissingProperties de la clase DataServiceContext se establezca en true para ignorar tales errores de asignación de cliente. En estos casos, una solicitud PUT restablecerá las propiedades que desconozca el cliente en sus valores predeterminados.

Vea también

Conceptos

Actualizar el servicio de datos (WCF Data Services)
Operaciones asincrónicas (WCF Data Services)
Realizar operaciones por lotes (WCF Data Services)

Otros recursos

Biblioteca de cliente de WCF Data Services