Share via


Ändern von Daten (WCF Data Services)

WCF Data Services verwendet Standardinternetprotokolle, um Interoperabilität mit Nicht-.NET Framework-Anwendungen zu ermöglichen, die HTTP-Anforderungen generieren und HTTP-Antworten nutzen können.In diesem Thema werden die unterstützten HTTP-Aktionen zum Ausführen von Erstellungs-, Lese-, Aktualisierungs- und Löschvorgängen für die Entitätsdaten erläutert, die die adressierte Ressource darstellt.

Einfügen von Daten in den Datendienst

Sie erstellen eine neue Entität, indem Sie eine HTTP POST-Anforderung an den URI senden, der die Zielentitätenmenge identifiziert.Zum Erstellen einer neuen Products-Entität mit dem auf Northwind basierenden Schnellstart-Datendienst muss eine Anwendung eine HTTP POST-Anforderung an den URI für die Products-Entitätenmenge senden, z. B. https://localhost:12345/Northwind.svc/Products.

Die Nutzlast der HTTP POST-Anforderung sind die in einem der unterstützten Formate codierten Entitätsdaten.Der Content-Type-Header der Anforderungsnachricht muss das Format der Nutzlast angeben, damit der Datendienst die Daten in der empfangenen Nachricht interpretieren kann.In der Nutzlast müssen Sie Eigenschaftswerte für alle Eigenschaften der Entität angeben, die keine NULL-Werte unterstützen, außer servergenerierte Werte.Alle nicht angegebene Werte werden auf den Standardwert oder NULL festgelegt.Weitere Informationen finden Sie unter POST-Methode (WCF Data Services) und Gewusst wie: Einfügen von Entitätsdaten als Ressource (WCF Data Services).

Hinweis

Sie können für eine Eigenschaft verschiedene Werte in einer einzelnen Nachrichtennutzlast angeben.Dies wird nicht empfohlen, da der Wert, der in der Datenquelle gespeichert wird, von der Datendienstimplementierung abhängt, die möglicherweise die Reihenfolge der Eigenschaftswertzuweisung nicht garantiert.

Nach der erfolgreichen Verarbeitung der POST-Anforderung generiert der Datendienst eine HTTP-Antwort, die eine Nutzlast enthält, die die gerade erstellte Entität darstellt. Diese Entität umfasst alle servergenerierten Werte oder von Triggern in einer Datenbank geänderten Werte.Die Antwortnachricht enthält auch einen Location-Header, der auf den URI der neu erstellten Entität verweist.Ausführlichere Informationen zu HTTP-Nachrichtenanforderungen zum Einfügen von Entitätsdaten finden Sie im Abschnitt 2.2.7.1.1 im Dokument "Atom Publishing Protocol: Data Services URI and Payload Extensions" (in englischer Sprache).

Aktualisieren von Daten im Datendienst

WCF Data Services unterstützt zwei separate HTTP-Methoden zum Aktualisieren von Daten in einem Datendienst:

  • HTTP PUT - Sie können eine vorhandene Entität aktualisieren, indem Sie eine HTTP PUT-Anforderung an den URI senden, der die Entität eindeutig adressiert.Diese Aktion ersetzt die vorhandenen Entitätsdaten durch Daten in der Nutzlast der Anforderungsnachricht, einschließlich aller skalaren Eigenschaften der Entität.Wenn kein skalarer Eigenschaftswert eingeschlossen wird, wird der Wert auf dem Server auf den Standardwert für die Eigenschaft zurückgesetzt.Die HTTP-Antwort "204 (No Content)" ist die Antwort auf eine erfolgreiche HTTP PUT-Anforderung.

  • HTTP MERGE - WCF Data Services führt die HTTP MERGE-Methode als Erweiterung für das AtomPub-Protokoll ein.Diese Methode ersetzt nur die bestimmten Eigenschaftswerte, die die Anforderungsnutzlast angibt.Dies bedeutet, dass die Entitätsdarstellung in der Nutzlast nur die Eigenschaften enthalten muss, die geändert werden.Wenn keine Eigenschaft eingeschlossen ist, wird der gerade in der Datenquelle vorhandene Wert beibehalten.Die erfolgreiche Antwort auf eine HTTP MERGE-Anforderung ist die HTTP-Antwort "204 (No Content)".Ausführlichere Informationen zur HTTP MERGE-Methode zum Aktualisieren von Entitätsdaten finden Sie im Abschnitt 2.2.4.1 MERGE im Dokument "Atom Publishing Protocol: Data Services URI and Payload Extensions" (in englischer Sprache).

Weitere Informationen finden Sie unter MERGE-Methode (WCF Data Services) und Gewusst wie: Aktualisieren von Entitätsdaten als Ressource (WCF Data Services).

Ausführlichere Informationen zu HTTP-Nachrichtenanforderungen zum Aktualisieren von Entitätsdaten finden Sie in den folgenden Abschnitten im Dokument "Atom Publishing Protocol: Data Services URI and Payload Extensions" (in englischer Sprache):

Löschen von Daten aus einer Ressource

Sie löschen Entitäten, indem Sie eine HTTP DELETE-Anforderung für den URI ausführen, der die zu löschende Entität adressiert.Eine HTTP DELETE-Anforderung erfordert keine Nutzlast.Wenn die Entität erfolgreich gelöscht wird, lautet die Antwortnachricht "204 (No Content)".Weitere Informationen finden Sie unter DELETE-Methode (WCF Data Services) und Gewusst wie Löschen von Entitätsdaten als Ressource (WCF Data Services).

Wenn eine zu löschende Entität eine eingeschränkte Beziehung zu einer anderen Entität aufweist, entweder im Entitätsmodell oder in der Datenbank, müssen Sie möglicherweise die verknüpfte Entität löschen, bevor die übergeordnete Entität gelöscht werden kann.Sie können z. B. keinen Kunden löschen, wenn nicht zuvor seine Bestellungen gelöscht werden, da Bestellungen nicht ohne Kunden existieren können.Weitere Informationen finden Sie unter Referential Constraints (Entity Framework).Wenn eine solche Einschränkung bewirkt, dass ein Löschvorgang fehlschlägt, wird eine Antwortnachricht mit den Details für den Fehler zurückgegeben.

Ausführlichere Informationen zu HTTP-Nachrichtenanforderungen zum Löschen einer Entität finden Sie im Abschnitt 2.2.7.4.1 im Dokument "Atom Publishing Protocol: Data Services URI and Payload Extensions" (in englischer Sprache).

Arbeiten mit Beziehungen

Wenn Sie eine Entität hinzufügen, aktualisieren oder löschen, die eine Beziehung zu einer oder mehreren anderen Entitäten aufweist, die im Datenmodell als Zuordnungen definiert werden, müssen Sie auch die Beziehung erstellen, ändern oder löschen können.WCF Data Services behandelt diese Beziehungen zwischen Entitätsinstanzen als Links, die mit dem $links-Operator adressiert werden.Weitere Informationen finden Sie unter Adressieren von Ressourcen (WCF Data Services).

Links werden immer als unidirektional definiert, z. B. zwischen einem Kunden und einer Bestellung.Da Beziehungen zwischen Entitäten bidirektional sind, gibt es einen Link in die andere Richtung, z. B. einen Verweislink zwischen der Bestellung und dem Kunden, zu dem sie gehört.Die Nutzlast einer Linkanforderung hängt vom Linktyp ab.Bei Links, die auf das "1"-Ende einer 1:1- oder n:1-Beziehung verweisen, enthält die Nutzlast der Nachricht ein link-Element, das einen URI enthält, der die verknüpfte Entität adressiert.Beim Senden eine HTTP POST-Nachricht zum Erstellen einer neuen Territory-Entität erstellt z. B. das folgende Linkelement in der Nachrichtennutzlast einen Verweislink zu einem bestimmten Region-Element, zu dem Territory gehört.

<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Region" title="Region" href="Region(4)">

Behandeln von Parallelität

WCF Data Services unterstützt die vollständige Parallelität zum Ermitteln von Aktualisierungskonflikten.Der Entwurf nutzt HTTP/1.1-Funktionen wie persistenten Cache, eTags (Entitätstags), "if-*"-Vorbedingungsheader und den eTag-Antwortheader.Weitere Informationen finden Sie in den HTTP-Regeln für eTags (RFC2626).

Ein eTag ist ein HTTP-Antwortheader, der von einem HTTP/1.1-kompatiblen Webserver zurückgegeben wird.eTags werden verwendet, um Inhaltsänderungen an bestimmten URLs zu ermitteln.Der Wert des Headers ist eine Zeichenfolge, die den Status der Ressource darstellt.Für Aktualisierungsanforderungen (PUT, MERGE) mit dem If-Match-Anforderungsheader kann ein eTag zusammen mit dem Text der Anforderung angegeben werden.Wenn das vom Client gesendete eTag nicht mit dem eTag übereinstimmt, das auf dem Server für die zu aktualisierende Ressource gespeichert ist, tritt ein Aktualisierungskonflikt auf, und der Einfügevorgang wird abgebrochen.In einer Abrufanforderung (GET) können Sie mithilfe des If-None-Match -HTTP-Headers das eTag der Ressource aus einer vorherigen Anforderung angeben.Wenn der Server bestimmt, dass das eTag das gleiche ist, wird angenommen, dass der Zustand der Ressource unverändert ist, und die Ressource wird in der Antwort nicht erneut gesendet.Ausführlichere Informationen zu einer eTag-Implementierung finden Sie im Abschnitt 2.2.5.4 im Dokument "Atom Publishing Protocol: Data Services URI and Payload Extensions" (in englischer Sprache).

Sie können die Parallelitätsüberprüfung im Datendienst aktivieren, indem Sie im Datenmodell ein Parallelitätstoken definieren.Ein Parallelitätstoken umfasst eine oder mehrere Eigenschaften eines Entitätstyps, die überprüft werden, um zu bestimmen, ob sich eine Ressource geändert hat.Wenn ein Parallelitätstoken für einen Entitätstyp definiert wird, generiert der Datendienst ein eTag für jede Anforderung, die eine Ressource dieses Typs zurückgibt.Parallelitätstokendefinitionen hängen vom Typ des Datendienstanbieters ab:

  • Entity Framework-Anbieter - Im Datenmodell wird das ConcurrencyMode-Attribut einer Eigenschaft, die Teil des Parallelitätstokens für einen Entitätstyp ist, auf Fixed festgelegt.

  • Reflektionsanbieter - Das ETagAttribute wird auf die Datenklasse angewendet, die ein Entitätstyp ist.Dieses Attribut deklariert das Parallelitätstoken basierend auf den angegebenen Eigenschaftennamen.

Siehe auch

Konzepte

Adressieren von Ressourcen (WCF Data Services)

Abfrageausdrücke (WCF Data Services)

Weitere Ressourcen

Zugreifen auf einen Datendienst (WCF Data Services)

Nutzlastformate (WCF Data Services)