Actualizar el servicio de datos (WCF Data Services)

Cuando se usa la biblioteca de cliente de WCF Data Services para usar una fuente de Open Data Protocol (OData) , la biblioteca traduce las entradas de la fuente en instancias de clases del servicio de datos del cliente. Se realiza el seguimiento de estas clases del servicio de datos mediante el uso de la clase DataServiceContext a la que pertenece la clase DataServiceQuery. El cliente realiza el seguimiento de los cambios en las entidades que se notifican utilizando métodos de la clase DataServiceContext. Estos métodos permiten al cliente realizar el seguimiento de las entidades agregadas y eliminadas y también los cambios que se realizan en los valores de propiedad o en las relaciones entre instancias de entidad. Estos cambios se devuelven al servicio de datos como operaciones basadas en REST al llamar al método SaveChanges.

Dd756361.note(es-es,VS.100).gifNota:
Al utilizar una instancia de DataServiceCollection para enlazar los datos a los controles, los cambios realizados en los datos del control enlazado se notifican automáticamente a DataServiceContext. Para obtener más información, vea Enlazar datos a controles (WCF Data Services).

Agregar, modificar y cambiar entidades

Cuando se usa el cuadro de diálogo Agregar referencia de servicio de Visual Studio para agregar una referencia a una fuente de OData , cada una de las clases del servicio de datos de cliente resultante tiene un método estático Create que toma un parámetro para cada propiedad de entidad que no admite valores NULL. Puede usar este método para crear instancias de clases de tipos de entidad, como en el ejemplo siguiente:

' Create the new product.
Dim newProduct = _
    Product.CreateProduct(0, "White Tea - loose", False)
// Create the new product.
Product newProduct =
    Product.CreateProduct(0, "White Tea - loose", false);

Para agregar una instancia de entidad, llame al método AddTo adecuado en la clase DataServiceContext generada por el cuadro de diálogo Agregar referencia de servicio, como se muestra en el ejemplo siguiente:

' Add the new product to the Products entity set.
context.AddToProducts(newProduct)
// Add the new product to the Products entity set.
context.AddToProducts(newProduct);

Esto agrega el objeto al contexto y al conjunto de entidades correcto. También puede llamar al método AddObject, pero, en ese caso, debe proporcionar el nombre del conjunto de entidades. Si la entidad agregada tiene una o varias relaciones con otras entidades, puede usar el método AddRelatedObject o bien uno de los métodos anteriores y también definir esos vínculos explícitamente. Estas operaciones se explican más adelante en este tema.

Para modificar una instancia de una entidad existente, primero ejecute una consulta para esa entidad, efectúe los cambios deseados en sus propiedades y, a continuación, llame al método UpdateObject de la instancia de DataServiceContext para indicar a la biblioteca cliente que debe enviar una actualización para ese objeto, como se muestra en el ejemplo siguiente:

' Mark the customer as updated.
context.UpdateObject(customerToChange)
// Mark the customer as updated.
context.UpdateObject(customerToChange);

Para eliminar una instancia de una entidad, llame al método DeleteObject de la instancia de la clase DataServiceContext, como se muestra en el ejemplo siguiente:

' Mark the product for deletion.    
context.DeleteObject(deletedProduct)
// Mark the product for deletion.    
context.DeleteObject(deletedProduct);

Para obtener más información, vea Cómo: Agregar, modificar y eliminar entidades (WCF Data Services).

Adjuntar entidades

La biblioteca de clientes le permite guardar las actualizaciones que realizó en una entidad sin ejecutar primero ninguna consulta para cargar la entidad en la instancia de la clase DataServiceContext. Use el método AttachTo para adjuntar un objeto existente a un conjunto de entidades concreto de la instancia de DataServiceContext. Después puede modificar el objeto y guardar los cambios en el servicio de datos. En el ejemplo siguiente, se adjunta al contexto un objeto de cliente que se ha cambiado y, a continuación, se llama a UpdateObject para marcar el objeto adjunto como Modified antes de llamar a SaveChanges:

' Attach the existing customer to the context and mark it as updated.
context.AttachTo("Customers", customer)
context.UpdateObject(customer)

' Send updates to the data service.
context.SaveChanges()
// Attach the existing customer to the context and mark it as updated.
context.AttachTo("Customers", customer);
context.UpdateObject(customer);

// Send updates to the data service.
context.SaveChanges();

Al adjuntar objetos deben tenerse en cuenta las consideraciones siguientes:

  • Un objeto se adjunta con el estado Unchanged.

  • Cuando se adjunta un objeto, no se adjuntan los objetos relacionados con el objeto adjunto.

  • No se puede adjuntar un objeto si el contexto ya está realizando el seguimiento de la entidad.

  • Se usa la sobrecarga del método AttachTo que toma un parámetro etag cuando se adjunta un objeto entidad que se recibió junto con un valor de eTag. Este valor de eTag se usa después para comprobar la simultaneidad cuando se guardan los cambios realizados en el objeto adjunto.

Para obtener más información, vea Cómo: Adjuntar una entidad existente a DataServiceContext (WCF Data Services).

Crear y modificar vínculos de relación

Cuando se agrega una nueva entidad usando el método AddObject o el método AddTo adecuado de la clase DataServiceContext generada por el cuadro de diálogo Agregar referencia de servicio, no se define automáticamente ninguna relación entre la nueva entidad y las entidades relacionadas.

Puede crear y cambiar las relaciones entre las instancias de las entidades y hacer que la biblioteca de cliente refleje esos cambios en el servicio de datos. Las relaciones entre las entidades se definen como asociaciones en el modelo y la clase DataServiceContext realiza el seguimiento de cada relación como objeto de vínculo en el contexto. WCF Data Services proporciona los siguientes métodos en la clase DataServiceContext para crear, modificar y eliminar estos vínculos:

Método Descripción

AddRelatedObject

Crea un nuevo vínculo entre dos objetos entidad relacionados. Llamar a este método es equivalente a llamar a los métodos AddObject y AddLink tanto para crear el nuevo objeto como para definir la relación en un objeto existente.

AddLink

Crea un nuevo vínculo entre dos objetos entidad relacionados.

SetLink

Actualiza un vínculo existente entre dos objetos entidad relacionados. El método SetLink también se usa para eliminar vínculos con una cardinalidad de cero o uno a uno (0..1:1) y de uno a uno (1:1). Para ello, puede establecer el objeto relacionado en null.

DeleteLink

Marca para su eliminación un vínculo cuyo seguimiento lo está realizando el contexto cuando se llame al método SaveChanges. Use este método cuando elimine un objeto relacionado o cuando cambie una relación eliminando primero el vínculo a un objeto existente y luego agregando un vínculo al nuevo objeto relacionado.

AttachLink

Notifica al contexto la existencia de un vínculo entre dos objetos entidad. El contexto supone que esta relación ya existe en el servicio de datos y no intenta crear el vínculo cuando se llama al método SaveChanges. Use este método cuando adjunte objetos a un contexto y también necesite adjuntar el vínculo entre los dos. Si está definiendo una nueva relación, en su lugar debe usar el método AddLink.

DetachLink

Deja de realizar el seguimiento del vínculo especificado en el contexto. Este método se usa para eliminar relaciones uno a varios (*:*). En vínculos de relación con una cardinalidad de uno, debe usar el método SetLink en su lugar.

En el ejemplo siguiente se muestra la forma de usar el método AddRelatedObject para agregar un nuevo Order_Detail que se relacione con una entidad Orders existente. Dado que el seguimiento del nuevo objeto Order_Details lo realiza la clase DataServiceContext, la relación del objeto Order_Details agregado a la entidad Products existente se define llamando al método AddLink:

' Add the new item with a link to the related order.
context.AddRelatedObject(order, "Order_Details", newItem)

' Since the item is now tracked by the context,
' set just the link to the related product.
context.AddLink(selectedProduct, "Order_Details", newItem)
// Add the new item with a link to the related order.
context.AddRelatedObject(order, "Order_Details", newItem);

// Since the item is now tracked by the context,
// set just the link to the related product.
context.AddLink(selectedProduct, "Order_Details", newItem);

Mientras que el método AddLink definen los vínculos que se deben crear en el servicio de datos, para que estos vínculos se reflejen en los objetos que están en el contexto, también debe establecer las propiedades de navegación en los propios objetos. En el ejemplo anterior, debe establecer las propiedades de navegación de la forma siguiente:

' Add the new order detail to the collection, and
' set the reference to the product.
order.Order_Details.Add(newItem)
newItem.Order = order
newItem.Product = selectedProduct
// Add the new order detail to the collection, and
// set the reference to the product.
order.Order_Details.Add(newItem);
newItem.Order = order;
newItem.Product = selectedProduct;

Para obtener más información, vea Cómo: Definir las relaciones de entidad (WCF Data Services).

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. Para obtener más información, vea Administrar el contexto del servicio de datos (Servicio de datos de WCF). También puede guardar cambios de forma asincrónica utilizando los métodos BeginSaveChanges y EndSaveChanges. Para obtener más información, vea Operaciones asincrónicas (WCF Data Services).

Vea también

Conceptos

Consultar el servicio de datos (WCF Data Services)
Operaciones asincrónicas (WCF Data Services)
Realizar operaciones por lotes (WCF Data Services)
Materialización de objetos (WCF Data Services)
Administrar el contexto del servicio de datos (Servicio de datos de WCF)

Otros recursos

Biblioteca de cliente de WCF Data Services