Freigeben über


Aktualisieren des Datendiensts WCF Data Services

Wenn Sie mithilfe der WCF Data Services-Clientbibliothek einen Open Data Protocol (OData)-Feed verwenden möchten, übersetzt die Bibliothek die Feedeinträge in Instanzen von Clientdatendienstklassen. Diese Datendienstklassen werden mithilfe des DataServiceContext nachverfolgt, zu dem die DataServiceQuery<TElement> gehört. Der Client verfolgt Änderungen an Entitäten nach, die Sie mit Methoden für DataServiceContext melden. Mithilfe dieser Methoden kann der Client hinzugefügte und gelöschte Entitäten sowie Änderungen an den Eigenschaftswerten oder an Beziehungen zwischen Entitätsinstanzen verfolgen. Wenn Sie die SaveChanges-Methode aufrufen, werden diese nachverfolgten Änderungen als REST-basierte Vorgänge an den Datendienst zurückgesendet.

Hinweis

Wenn Sie mithilfe einer Instanz von DataServiceCollection<T> Daten an Steuerelemente binden, werden die an Daten im gebundenen Steuerelement vorgenommenen Änderungen automatisch dem DataServiceContext gemeldet.Weitere Informationen finden Sie unter Binden von Daten an Steuerelemente (WCF Data Services).

Hinzufügen, Bearbeiten und Ändern von Entitäten

Wenn Sie das Dialogfeld Dienstverweis hinzufügen in Visual Studio zum Hinzufügen eines Verweises zu einem OData-Feed verwenden, verfügen die resultierenden Clientdatendienstklassen jeweils über eine statische Create-Methode, die einen Parameter für jede Entitätseigenschaft verwendet, die keine Null-Werte zulässt. Sie können mithilfe dieser Methode Instanzen von Entitätstypklassen wie im folgenden Beispiel erstellen:

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

Rufen Sie zum Hinzufügen einer Entitätsinstanz die entsprechende AddToAddTo-Methode für die vom Dialogfeld DataServiceContextDienstverweis hinzufügen generierte -Klasse wie im folgenden Beispiel auf:

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

Diese fügt das Objekt zum Kontext und in die richtige Entitätenmenge hinzu. Sie können auch AddObject aufrufen, Sie müssen jedoch stattdessen den Entitätenmengennamen angeben. Wenn die hinzugefügte Entität über eine oder mehrere Beziehungen zu anderen Entitäten verfügt, können Sie entweder die AddRelatedObject-Methode verwenden, oder Sie verwenden eine der vorherigen Methoden und definieren die Links auch explizit. Diese Vorgänge werden weiter unten in diesem Thema erläutert.

Zum Ändern einer vorhandenen Instanz einer Entität führen Sie zunächst eine Abfrage für die entsprechende Entität durch und nehmen die gewünschten Änderungen an den zugehörigen Eigenschaften vor. Rufen Sie anschließend die UpdateObject-Methode für den DataServiceContext auf, um der Clientbibliothek mitzuteilen, dass eine Aktualisierung für dieses Objekt gesendet werden muss, wie im folgenden Beispiel dargestellt:

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

Zum Löschen einer Entitätsinstanz rufen Sie wie im folgenden Beispiel dargestellt die DeleteObject-Methode für den DataServiceContext auf:

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

Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen, Ändern und Löschen von Entitäten (WCF Data Services).

Anfügen von Entitäten

Mithilfe der Clientbibliothek können Sie an einer Entität vorgenommene Aktualisierungen speichern, ohne zuerst eine Abfrage zum Laden der Entität in den DataServiceContext auszuführen. Verwenden Sie die AttachTo-Methode, um ein vorhandenes Objekt an eine bestimmte Entitätenmenge im DataServiceContext anzufügen. Sie können dann das Objekt ändern und die Änderungen am Datendienst speichern. Im folgenden Beispiel wird ein geändertes Kundenobjekt an den Kontext angefügt, und dann wird UpdateObject aufgerufen, um das angefügte Objekt als Modified zu markieren, bevor SaveChanges aufgerufen wird:

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

Folgendes gilt beim Anfügen von Objekten:

  • Ein Objekt wird im Unchanged-Zustand angefügt.

  • Wenn ein Objekt angefügt wird, werden Objekte, die sich auf das angefügte Objekt beziehen, nicht auch angefügt.

  • Ein Objekt kann nicht angefügt werden, wenn die Entität bereits vom Kontext verfolgt wird.

  • Die AttachTo(String, Object, String)-Methodenüberladung, die einen etag-Parameter annimmt, wird verwendet, wenn Sie ein zusammen mit einem eTag-Wert empfangenes Entitätsobjekt anfügen. Dieser eTag-Wert wird dann zur Überprüfung auf Parallelität verwendet, wenn Änderungen am angefügten Objekt gespeichert werden.

Weitere Informationen finden Sie unter Gewusst wie: Anfügen einer vorhandenen Entität an DataServiceContext (WCF Data Services).

Wenn Sie entweder mit der AddObject-Methode oder der entsprechenden AddTo-Methode der DataServiceContext-Klasse eine neue Entität hinzufügen, die das Dialogfeld Dienstverweis hinzufügen generiert, werden Beziehungen zwischen der neuen Entität und verknüpften Entitäten nicht automatisch definiert.

Sie können Beziehungen zwischen Entitätsinstanzen erstellen und ändern und die Clientbibliothek diese Änderungen im Datendienst widerspiegeln lassen. Beziehungen zwischen Entitäten werden im Modell als Zuordnungen definiert, und das DataServiceContext-Objekt verfolgt jede Beziehung als Linkobjekt im Kontext. WCF Data Services stellt die folgenden Methoden für die DataServiceContext -Klasse zum Erstellen, Ändern und Löschen dieser Links bereit:

Methode

Beschreibung

AddRelatedObject

Erstellt einen neuen Link zwischen zwei verknüpften Entitätsobjekten. Das Aufrufen dieser Methode entspricht dem Aufrufen von AddObject(String, Object) und AddLink(Object, String, Object), um das neue Objekt zu erstellen und die Beziehung zu einem vorhandenen Objekt zu definieren.

AddLink

Erstellt einen neuen Link zwischen zwei verknüpften Entitätsobjekten.

SetLink

Aktualisiert einen vorhandenen Link zwischen zwei verknüpften Entitätsobjekten. SetLink(Object, String, Object) wird auch verwendet, um Links mit einer Kardinalität von 0- bzw. 1:1 (0..1:1) und 1:1 (1:1) zu löschen. Sie können dazu das verknüpfte Objekte auf null festlegen.

DeleteLink

Markiert einen Link, den der Kontext für den Löschvorgang nachverfolgt, wenn die SaveChanges-Methode aufgerufen wird. Verwenden Sie diese Methode, wenn Sie ein verknüpftes Objekt löschen oder durch das Löschen des Links zu einem vorhandenen Objekt und dem nachfolgenden Hinzufügen eines Links zum neuen verknüpften Objekt eine Beziehung ändern.

AttachLink

Benachrichtigt den Kontext über einen vorhandenen Link zwischen zwei Entitätsobjekten. Der Kontext geht davon aus, dass diese Beziehung bereits im Datendienst vorhanden ist, und versucht nicht, den Link zu erstellen, wenn Sie die SaveChanges-Methode aufrufen. Verwenden Sie diese Methode, wenn Sie Objekte an einen Kontext anfügen und außerdem den Link zwischen beiden anfügen müssen. Wenn Sie eine neue Beziehung definieren, sollten Sie stattdessen AddLink verwenden.

DetachLink

Beendet die Nachverfolgung des angegebenen Links im Kontext. Diese Methode wird verwendet, um 1:n-Beziehungen (*:*) zu löschen. Für Beziehungslinks mit einer Multiplizität von 1 müssen Sie stattdessen SetLink(Object, String, Object) verwenden.

Hinweis

Die meisten Datendienstanbieter, einschließlich des Entity Framework-Anbieters, behandeln Beziehungen zwischen Entitäten im Datenmodell als bidirektional.Die Zuordnung zwischen den Entitäten Customers und Orders stellt z. B. eine Beziehung zwischen einem Kunden und einer oder mehreren Bestellungen und außerdem eine Beziehung zwischen einer Bestellung und dem Kunden dar, zu dem sie gehört.Wenn der Datendienstanbieter beide Richtungen einer neuen Beziehung nicht erstellt, müssen Sie möglicherweise auch die SetLink(Object, String, Object)-Methode zusammen mit AddLink(Object, String, Object) aufrufen, um beide Richtungen der Beziehung zu definieren.

Im folgenden Beispiel wird gezeigt, wie die AddRelatedObject-Methode verwendet wird, um ein neues Order_Detail hinzuzufügen, das sich auf eine vorhandene Orders-Entität bezieht. Da das neue Order_Details-Objekt jetzt vom DataServiceContext nachverfolgt wird, wird die Beziehung des hinzugefügten Order_Details-Objekts zur vorhandenen Products-Entität definiert, indem die AddLink-Methode aufgerufen werden:

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

Während die AddLink-Methode Links definiert, die im Datendienst erstellt werden müssen, müssen Sie auch die Navigationseigenschaften für die Objekte selbst festlegen, damit sich diese Links in den im Kontext enthaltenen Objekten widerspiegeln. Im vorherigen Beispiel sollten Sie die Navigationseigenschaften wie folgt festlegen:

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

Weitere Informationen finden Sie unter Gewusst wie: Definieren von Entitätsbeziehungen (WCF Data Services).

Speichern von Änderungen

Änderungen werden in der DataServiceContext-Instanz nachverfolgt, jedoch nicht unmittelbar an den Server gesendet. Wenn Sie die erforderlichen Änderungen für eine bestimmte Aktivität vorgenommen haben, rufen Sie SaveChanges auf, um alle Änderungen an den Datendienst zu übergeben. Weitere Informationen finden Sie unter Verwalten des Datendienstkontextes (WCF Data Services). Sie können Änderungen mit der BeginSaveChanges-Methode und der EndSaveChanges-Methode auch asynchron speichern. Weitere Informationen finden Sie unter Asynchrone Vorgänge (WCF Data Services).

Siehe auch

Konzepte

Abfragen des Datendiensts (WCF Data Services)

Asynchrone Vorgänge (WCF Data Services)

Batchverarbeitungsvorgänge (WCF Data Services)

Objektmaterialisierung (WCF Data Services)

Verwalten des Datendienstkontextes (WCF Data Services)

Andere Ressourcen

Datenclient (WCF Data Services)