Partager via


Mise à jour du service de données (WCF Data Services)

Lorsque vous utilisez la bibliothèque cliente Services de données WCF pour exploiter un flux Protocole OData (Open Data) , la bibliothèque traduit les entrées du flux en instances de classes de service de données client. Ces classes de service de données sont suivies à l'aide du DataServiceContext auquel DataServiceQuery appartient. Le client suit les modifications apportées aux entités que vous signalez à l'aide de méthodes sur DataServiceContext. Ces méthodes permettent au client de suivre les entités ajoutées et supprimées, ainsi que les modifications que vous apportez aux valeurs de propriété ou aux relations entre les instances d'entités. Ces modifications suivies sont renvoyées au service de données sous forme d'opérations REST lorsque vous appelez la méthode SaveChanges.

Dd756361.note(fr-fr,VS.100).gifRemarque :
Lorsque vous utilisez une instance de DataServiceCollection pour lier des données et des contrôles, les modifications apportées aux données dans le contrôle lié sont automatiquement signalées à l'objet DataServiceContext. Pour plus d'informations, consultez Liaison des données aux contrôles (WCF Data Services).

Ajout, modification et changement d'entités

Lorsque vous utilisez la boîte de dialogue Ajouter une référence de service dans Visual Studio pour ajouter une référence à un flux OData , les classes de service de données client résultantes ont chacune une méthode Create statique qui utilise un paramètre pour chaque propriété d'entité non Nullable. Vous pouvez utiliser cette méthode pour créer des instances de classes de type d'entité, comme dans l'exemple suivant :

' 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);

Pour ajouter une instance d'entité, appelez la méthode AddTo appropriée sur la classe DataServiceContext générée par la boîte de dialogue Ajouter une référence de service, comme dans l'exemple suivant :

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

Cela ajoute l'objet au contexte et au jeu correct d'entités. Vous pouvez également appeler AddObject, mais vous devez fournir à la place le nom de jeu d'entités. Si l'entité ajoutée possède une ou plusieurs relations à d'autres entités, vous pouvez utiliser la méthode AddRelatedObject ou l'une des méthodes précédentes et définir aussi explicitement ces liens. Ces opérations sont traitées plus loin dans cette rubrique.

Pour modifier une instance d'entité existante, recherchez tout d'abord cette entité, apportez les modifications souhaitées à ses propriétés, puis appelez la méthode UpdateObject sur DataServiceContext pour indiquer à la bibliothèque cliente qu'elle doit envoyer une mise à jour de cet objet, comme illustré dans cet exemple :

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

Pour supprimer une instance d'entité, appelez la méthode DeleteObject sur DataServiceContext, comme illustré dans l'exemple suivant :

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

Pour plus d'informations, consultez Procédure : ajouter, modifier et supprimer des entités (WCF Data Services).

Attachement d'entités

La bibliothèque cliente vous permet d'enregistrer des mises à jour apportées à une entité sans exécuter en premier une requête pour charger l'entité dans DataServiceContext. Utilisez la méthode AttachTo pour joindre un objet existant à un jeu d'entités spécifique dans DataServiceContext. Vous pouvez modifier ensuite l'objet et enregistrer les modifications apportées au service de données. Dans l'exemple suivant, un objet client été modifié et joint au contexte, puis UpdateObject est appelé pour marquer l'objet attaché comme Modified avant l'appel de 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();

Vous devez tenir compte des points suivants lors de l'attachement d'objets :

  • Un objet est joint dans l'état Unchanged.

  • Lorsqu'un objet est joint, les objets associés à l'objet joint ne sont pas non plus joints.

  • Un objet ne peut pas être joint si l'entité fait déjà l'objet d'un suivi par le contexte.

  • La surcharge de méthode AttachTo qui utilise un paramètre etag est utilisée lorsque vous attachez un objet entité ayant été reçu avec une valeur eTag. Cette valeur eTag est ensuite utilisée pour vérifier l'accès concurrentiel lorsque les modifications apportées à l'objet attaché sont enregistrées.

Pour plus d'informations, consultez Procédure : joindre une entité existante à DataServiceContext (WCF Data Services).

Création et modification des liens de relation

Lorsque vous ajoutez une nouvelle entité à l'aide de la méthode AddObject ou de la méthode AddTo appropriée de la classe DataServiceContext générée par la boîte de dialogue Ajouter une référence de service, les relations entre la nouvelle entité et les entités associées ne sont pas définies automatiquement.

Vous pouvez créer et modifier les relations entre des instances d'entité et faire répercuter par la bibliothèque cliente ces modifications dans le service de données. Les relations entre les entités sont définies comme des associations dans le modèle, et DataServiceContext suit chaque relation comme un objet de lien dans le contexte. Services de données WCF fournit les méthodes suivantes sur la classe DataServiceContext pour créer, modifier et supprimer ces liens :

Méthode Description

AddRelatedObject

Crée un lien entre deux objets entité connexes. L'appel de cette méthode revient à appeler AddObject et AddLink pour créer le nouvel objet et définir la relation avec un objet existant.

AddLink

Crée un lien entre deux objets entité connexes.

SetLink

Met à jour un lien existant entre des objets entité liés. SetLink est également utilisé pour supprimer des liens avec une cardinalité de zéro-ou-un-à-un (0..1:1) et un-à-un (1:1). Pour ce faire, vous pouvez définir l'objet lié sur Null.

DeleteLink

Marque un lien que le contexte suit pour la suppression lorsque la méthode SaveChanges est appelée. Utilisez cette méthode lorsque vous supprimez un objet connexe ou modifiez une relation en supprimant en premier le lien vers un objet existant et en ajoutant ensuite un lien au nouvel objet connexe.

AttachLink

Notifie le contexte d'un lien existant entre deux objets entité. Le contexte suppose que cette relation existe déjà dans le service de données et ne cherche pas à créer le lien lorsque vous appelez la méthode SaveChanges. Utilisez cette méthode lorsque vous joignez des objets à un contexte et devez joindre également le lien entre les deux. Si vous définissez une nouvelle relation, vous devez utiliser à la place AddLink.

DetachLink

Arrête le suivi du lien spécifié dans le contexte. Cette méthode est utilisée pour supprimer les relations un-à-plusieurs (*:*). Pour les liens de relation avec une cardinalité de un, vous devez utiliser SetLink à la place.

L'exemple suivant montre comment utiliser la méthode AddRelatedObject pour ajouter un nouveau Order_Detail associé à une entité Orders existante. Étant donné que le nouvel objet Order_Details est maintenant suivi par DataServiceContext, la relation de l'objet Order_Details ajouté à l'entité Products existante est définie par l'appel de la méthode 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);

Si la méthode AddLink définit des liens qui doivent être créés dans le service de données, pour que ces liens soient répercutés dans les objets du contexte, vous devez également définir les propriétés de navigation sur les objets eux-mêmes. Dans l'exemple précédent, vous devez définir les propriétés de navigation comme suit :

' 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;

Pour plus d'informations, consultez Procédure : définir des relations d'entité (WCF Data Services).

Enregistrement des modifications

Les modifications sont suivies dans l'instance DataServiceContext mais ne sont pas envoyées au serveur immédiatement. Une fois que vous avez terminé d'effectuer les modifications requises pour une activité spécifiée, appelez SaveChanges afin de soumettre toutes les modifications au service de données. Pour plus d'informations, consultez Gérer le contexte du service de données (WCF Data Services). Vous pouvez également enregistrer des modifications de façon asynchrone à l'aide des méthodes BeginSaveChanges et EndSaveChanges. Pour plus d'informations, consultez Opérations asynchrones (WCF Data Services).

Voir aussi

Concepts

Interrogation du service de données (WCF Data Services)
Opérations asynchrones (WCF Data Services)
Opérations de traitement par lot (WCF Data Services)
Matérialisation d'objets (WCF Data Services)
Gérer le contexte du service de données (WCF Data Services)

Autres ressources

Bibliothèque cliente de WCF Data Services