Objektmaterialisierung (WCF Data Services)
Wenn Sie das Dialogfeld Dienstverweis hinzufügen verwenden, um einen Open Data Protocol (OData) -Feed in einer .NET Framework-basierten Clientanwendung zu nutzen, werden für jeden Entitätstyp in dem vom Feed verfügbar gemachten Datenmodell entsprechende Datenklassen generiert. Weitere Informationen finden Sie unter Generieren der Datendienst-Clientbibliothek (WCF Data Services). Entitätsdaten, die von einer Abfrage zurückgegeben werden, werden in eine Instanz einer dieser generierten Client-Datendienstklassen materialisiert. Weitere Informationen zu Zusammenführungsoptionen und zur Identitätsauflösung für nachverfolgte Objekte finden Sie unter Verwalten des Datendienstkontextes (WCF Data Services).
Mit WCF Data Services können Sie auch eigene Client-Datendienstklassen definieren, anstatt die von Tools generierten Datenklassen zu verwenden. Dies ermöglicht es Ihnen, eigene Datenklassen zu verwenden, die auch als POCO (plain-old CLR object)-Datenklassen bezeichnet werden. Wenn Sie diese Arten von benutzerdefinierten Datenklassen verwenden, sollten Sie die Datenklasse mit DataServiceKeyAttribute oder DataServiceEntityAttribute auszeichnen und sicherstellen, dass Typnamen auf dem Client mit Typnamen im Datenmodell des Datendiensts übereinstimmen.
Nachdem die Bibliothek die Abfrageantwortnachricht empfangen hat, materialisiert sie die zurückgegebenen Daten aus dem OData -Feed in Instanzen von Client-Datendienstklassen, die dem Typ der Abfrage entsprechen. Zur Materialisierung dieser Objekte werden die folgenden allgemeinen Schritte ausgeführt:
Die Clientbibliothek liest den serialisierten Typ aus dem entry-Element im Antwortnachrichtenfeed und versucht, mit einer der folgenden Methoden eine neue Instanz des richtigen Typs zu erstellen:
Wenn der im Feed deklarierte Typ den gleichen Namen wie den Typ der DataServiceQuery-Abfrage hat, wird mit dem leeren Konstruktor eine neue Instanz dieses Typs erstellt.
Wenn der im Feed deklarierte Typ den gleichen Namen wie ein Typ hat, der vom Typ vom DataServiceQuery abgeleitet ist, wird mit dem leeren Konstruktor eine neue Instanz dieses abgeleiteten Typs erstellt.
Wenn der im Feed deklarierte Typ nicht dem Typ der DataServiceQuery-Abfrage oder einem abgeleiteten Typen entspricht, wird mit dem leeren Konstruktor eine neue Instanz des abgefragten Typs erstellt.
Wenn die ResolveType-Eigenschaft festgelegt wird, wird der angegebene Delegat aufgerufen, um die namensbasierte Standardtypzuordnung zu überschreiben, und stattdessen wird eine neue Instanz des Typs erstellt, die von Func zurückgegeben wurde. Wenn dieser Delegat einen NULL-Wert zurückgibt, wird stattdessen eine neue Instanz des abgefragten Typs erstellt. Es ist möglicherweise erforderlich, die namensbasierte Standardtypnamenzuordnung zu überschreiben, um Vererbungsszenarien zu unterstützen.
Die Clientbibliothek liest den URI-Wert aus dem id-Element des entryElements, das der Identitätswert der Entität darstellt. Sofern nicht der MergeOption-Wert NoTracking verwendet wird, wird der Identitätswert verwendet, um das Objekt im DataServiceContext-Kontext zu verfolgen. Der Identitätswert wird auch verwendet, um zu garantieren, dass selbst dann nur eine einzelne Entitätsinstanz erstellt wird, wenn eine Entität mehrmals in der Abfrageantwort zurückgegeben wird.
Die Clientbibliothek liest Eigenschaften vom Feedeintrag und legt die entsprechenden Eigenschaften auf dem neu erstellten Objekt fest. Wenn ein Objekt über den gleichen Identitätswert verfügt wie ein bereits im DataServiceContext-Kontext vorhandenes Objekt, dann werden die Eigenschaften auf der Grundlage der MergeOption-Einstellung des DataServiceContext-Kontexts festgelegt. Die Antwort kann Eigenschaftswerte enthalten, für die keine entsprechende Eigenschaft im Clienttyp vorhanden ist. Wenn dieser Fall eintritt, hängt die Aktion vom Wert der IgnoreMissingProperties-Eigenschaft des DataServiceContext-Kontexts ab. Wenn diese Eigenschaft auf true festgelegt wurde, wird die fehlende Eigenschaft ignoriert. Andernfalls wird ein Fehler ausgelöst. Eigenschaften werden wie folgt festgelegt:
Skalare Eigenschaften werden auf den entsprechenden Wert im Eintrag in der Antwortnachricht festgelegt.
Komplexe Eigenschaften werden auf eine neue komplexe Typinstanz festgelegt, die mit den Eigenschaften des komplexen Typs von der Antwort festgelegt wird.
Navigationseigenschaften, die eine Sammlung von verknüpften Entitäten zurückgeben, werden auf eine neue oder vorhandene Instanz von ICollection festgelegt, wobei T der Typ der verknüpften Entität ist. Diese Sammlung ist leer, sofern die verknüpften Objekte nicht in den DataServiceContext-Kontext geladen wurden. Weitere Informationen finden Sie unter Laden von verzögertem Inhalt (WCF Data Services).
Hinweis: Wenn die generierten Clientdatenklassen die Datenbindung unterstützen, geben Navigationseigenschaften stattdessen Instanzen der DataServiceCollection-Klasse zurück. Weitere Informationen finden Sie unter Binden von Daten an Steuerelemente (WCF Data Services).
Das ReadingEntity-Ereignis wird ausgelöst.
Die Clientbibliothek fügt das Objekt an den DataServiceContext-Kontext an. Das Objekt wird nicht angefügt, wenn MergeOption auf NoTracking festgelegt wurde.
Siehe auch
Konzepte
Abfragen des Datendiensts (WCF Data Services)
Abfrageprojektionen (WCF Data Services)