Freigeben über


Verwalten des Datendienstkontextes (WCF Data Services)

Gg602811.note(de-de,VS.100).gifHinweis:
In diesem Thema wird die neue Funktionalität in WCF Data Services beschrieben. Die neue Funktionalität unterstützt Version 3 des Open Data Protocol (OData) und steht als Update für .NET Framework, Version 4, zur Verfügung. Sie können das Update vom Microsoft Download-Center herunterladen und anschließend installieren.

Die DataServiceContext-Klasse kapselt Vorgänge, die für einen angegebenen Datendienst unterstützt werden. Im Gegensatz zu OData -Diensten ist der Kontext nicht zustandslos. Sie können daher mithilfe der DataServiceContext-Klasse den Zustand auf dem Client zwischen Interaktionen mit dem Datendienst beibehalten, um Funktionen wie das Änderungsmanagement zu unterstützen. Von dieser Klasse werden auch Identitäten verwaltet und Änderungen nachverfolgt.

Zusammenführungsoptionen und Identitätsauflösung

Wenn eine DataServiceQuery ausgeführt wird, werden die Entitäten im Antwortfeed in Objekte materialisiert. Weitere Informationen finden Sie unter Objektmaterialisierung (WCF Data Services). Die Methode, mit der Einträge in einer Antwortnachricht in Objekte materialisiert werden, ist von der Identitätsauflösung und von der Zusammenführungsoption abhängig, mit der die Abfrage ausgeführt wurde. Wenn im Bereich eines einzelnen DataServiceContext verschiedene Abfragen oder Ladeanforderungen ausgeführt werden, verfolgt der WCF Data Services -Client nur eine einzelne Instanz eines Objekts, das über einen bestimmten Schlüsselwert verfügt. Dieser Schlüssel, der für das Ausführen einer Identitätsauflösung verwendet wird, identifiziert eine Entität eindeutig.

In der Standardeinstellung wird vom Client nur ein Eintrag im Antwortfeed in ein Objekt für Entitäten materialisiert, die noch nicht vom DataServiceContext verfolgt werden. Dies bedeutet, dass Änderungen an Objekten, die sich bereits im Cache befinden, nicht überschrieben werden. Dieses Verhalten wird gesteuert, indem für Abfragen und Ladevorgänge ein MergeOption-Wert angegeben wird. Diese Option wird festgelegt, indem die MergeOption-Eigenschaft auf dem DataServiceContext festgelegt wird. Der Standardwert der Zusammenführungsoption lautet AppendOnly. Mit dieser Einstellung werden nur Objekte für Entitäten materialisiert, die noch nicht verfolgt werden, d. h. vorhandene Objekte werden nicht überschrieben. Um zu verhindern, dass Änderungen an Objekten auf dem Client durch Aktualisierungen des Datendiensts überschrieben werden, kann auch die Option PreserveChanges festgelegt werden. Wenn OverwriteChanges festgelegt wird, werden Werte von Objekten des Clients durch die aktuellen Werte aus Einträgen im Antwortfeed ersetzt. Dies gilt auch, wenn an diesen Objekten bereits Änderungen vorgenommen wurden. Wenn eine NoTracking-Zusammenführungsoption verwendet wird, kann der DataServiceContext keine Änderungen, die an Clientobjekten gemacht wurden, an den Datendienst senden. Mit dieser Option werden Änderungen immer durch Werte des Datendiensts überschrieben.

Verwalten der Parallelität

OData unterstützt vollständige Parallelität, sodass der Datendienst Updatekonflikte erkennen kann. Der Datendienstanbieter kann so konfiguriert werden, dass der Datendienst mithilfe eines Parallelitätstokens nach Änderungen an Entitäten sucht. Dieses Token beinhaltet mindestens eine Eigenschaft eines Entitätstyps, die vom Datendienst überprüft wird, um zu bestimmen, ob sich eine Ressource geändert hat. Parallelitätstoken, die im eTag-Header von Antworten vom und Anforderungen an den Datendienst enthalten sind, werden vom WCF Data Services -Client verwaltet. Weitere Informationen finden Sie unter Aktualisieren des Datendiensts WCF Data Services.

Der DataServiceContext verfolgt Änderungen, die an Objekten vorgenommen wurden, die manuell mit AddObject, UpdateObject und DeleteObject oder von einer DataServiceCollection gemeldet wurden. Wenn die SaveChanges-Methode aufgerufen wird, sendet der Client die Änderungen zurück an den Datendienst. SaveChanges kann fehlschlagen, wenn ein Konflikt zwischen den Datenänderungen auf dem Client und den Änderungen im Datendienst auftritt. In einem solchen Fall müssen Sie die Entitätsressource erneut abfragen, um die Updatedaten zu erhalten. Um Änderungen im Datendienst zu überschreiben, führen Sie die Abfrage mit der PreserveChanges-Zusammenführungsoption aus. Wenn Sie SaveChanges erneut aufrufen, werden die auf dem Client beibehaltenen Änderungen im Datendienst beibehalten, sofern an der Ressource im Datendienst noch keine anderen Änderungen vorgenommen wurden.

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. Ein DataServiceResponse-Objekt wird zurückgegeben, nachdem der SaveChanges-Vorgang abgeschlossen wurde. Das DataServiceResponse-Objekt enthält eine Folge von OperationResponse-Objekten, die wiederum eine Folge von EntityDescriptor-Instanzen oder LinkDescriptor-Instanzen enthalten, die die beibehaltenen Änderungen oder Änderungsversuche darstellen. Wenn eine Entität im Datendienst erstellt oder geändert wird, schließt der EntityDescriptor einen Verweis auf die aktualisierte Entität ein, der alle vom Server generierten Eigenschaftswerte enthält, z. B. den generierten ProductID-Wert im vorherigen Beispiel. Das .NET Framework-Objekt wird von der Clientbibliothek automatisch mit diesen neuen Werten aktualisiert.

Bei erfolgreichen Einfüge- und Aktualisierungsvorgängen wird die Zustandseigenschaft des EntityDescriptor- oder LinkDescriptor-Objekts, das dem Vorgang zugeordnet ist, auf Unchanged festgelegt, und die neuen Werte werden mithilfe von OverwriteChanges zusammengeführt. Wenn im Datendienst ein Einfüge-, Aktualisierungs- oder Löschvorgang fehlschlägt, entspricht der Entitätszustand weiterhin dem Zustand vor dem Aufrufen von SaveChanges, und die Error-Eigenschaft der OperationResponse wird auf eine DataServiceRequestException festgelegt, die Informationen zum Fehler enthält. Weitere Informationen finden Sie unter Aktualisieren des Datendiensts WCF Data Services.

Festlegen der HTTP-Methode für Updates

Die .NET Framework-Clientbibliothek sendet Updates an vorhandenen Entitäten standardmäßig als MERGE-Anforderungen. Durch eine MERGE-Anforderung werden ausgewählte Eigenschaften der Entität aktualisiert. Der Client schließt jedoch immer alle Eigenschaften in die MERGE-Anforderung ein, auch Eigenschaften, die nicht geändert wurden. Das OData -Protokoll unterstützt auch das Senden von PUT-Anforderungen zum Aktualisieren von Entitäten. In einer PUT-Anforderung wird eine vorhandene Entität im Grunde durch eine neue Instanz der Entität mit Eigenschaftswerten vom Client ersetzt. Legen Sie zum Verwenden von PUT-Anforderungen das ReplaceOnUpdate-Flag für die SaveChangesOptions-Enumeration fest, wenn Sie SaveChanges aufrufen.

Gg602811.note(de-de,VS.100).gifHinweis:
Eine PUT-Anforderung verhält sich anders als eine MERGE-Anforderung, wenn der Client nicht alle Eigenschaften der Entität kennt. Dies kann vorkommen, wenn ein Entitätstyp in einen neuen Typ auf dem Client projiziert wird. Diese Situation kann auch auftreten, wenn der Entität im Datenmodell des Diensts neue Eigenschaften hinzugefügt wurden und die IgnoreMissingProperties-Eigenschaft des DataServiceContext auf true festgelegt ist, um solche Clientzuordnungsfehler zu ignorieren. In diesen Fällen werden bei einer PUT-Anforderung alle Eigenschaften, die dem Client nicht bekannt sind, auf die Standardwerte zurückgesetzt.

Siehe auch

Konzepte

Aktualisieren des Datendiensts WCF Data Services
Asynchrone Vorgänge (WCF Data Services)
Batchverarbeitungsvorgänge (WCF Data Services)

Weitere Ressourcen

WCF Data Services-Clientbibliothek