Sdílet prostřednictvím


Verzögerte Inhalte (JSON ADO.NET Data Services-Framework)

Die in einer Antwort von ADO.NET Data Services zurückgegeben Daten können mitunter äußerst umfangreich sein. Um Bandbreite oder CPU-Zyklen einzusparen, geben Datendienste möglicherweise nicht die vollständige Antwort auf eine Anforderung zurück. In ADO.NET Data Services kann das Senden fast aller Abschnitte einer Antwort verzögert werden. Dabei ist es wahrscheinlich, dass die Serialisierung der Navigationseigenschaften oder großer Eigenschaftswerte (wie z. B. BLOBS oder Bilder) verzögert wird.

Im folgenden Beispiel wird aufgezeigt, wie in ADO.NET Data Services verzögerte Inhalte angegeben werden, für die eine JSON-Serialisierung verwendet wird. Wenn beispielsweise die beiden Entitätstypen Customer und Order vorhanden sind und ein Kunde mehreren Bestellungen zugeordnet ist, erfolgt die Standardserialisierung einer Customer-Entität folgendermaßen:

{ "d":
 { 
    __metadata: {
        uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customers"
    }, CustomerID: "NTSOS", CompanyName: "Contoso Ltd",
        Address: "1010 Street", Orders: {
        __deferred: {
            uri: "Customers(\'NTSOS\')/Orders" 
        }
    }
 }
}

Die __deferred-Eigenschaft in diesem Beispiel gibt an, dass die Werte von Order-Elementen nicht zurückgegeben werden. Um die Werte abzurufen, muss eine GET-Anforderung direkt für Customers(\'NTSOS\')/Orders durchgeführt werden.

Regeln für verzögerte Inhalte in JSON

Die Verwendung von verzögerten Inhalten in ADO.NET Data Services erfolgt anhand der folgenden Regeln, wenn eine JSON-Serialisierung verwendet wird:

  • Die Inhalte der vom __deferred-Befehl mit einer Anmerkung versehenen Eigenschaft werden bei der Serialisierung nicht zurückgegeben. Die Inhalte können abgerufen werden, indem für das übergeordnete Element eine GET-Anforderung durchgeführt wird. Außerdem kann die Abfrageoption $expand eingefügt werden, um eine Verzögerung zu verhindern. Weitere Informationen finden Sie unter ADO.NET Data Services-Systemabfrageoptionen.

  • Bei der Eigenschaft __deferred darf es sich nicht um eine Eigenschaft des äußersten Objekts handeln, es sei denn, dieses verfügt über keine anderen Eigenschaften.

  • Die Eigenschaft __deferred impliziert nicht, dass Inhalte verzögert wurden. Sie gibt an, dass mögliche Inhalte noch nicht ausgewertet oder serialisiert wurden.

  • In der Standardeinstellung wird in ADO.NET Data Services die Serialisierung folgender Arten von Daten verzögert:

    • Navigationseigenschaftswerte

    • Linkwerte

    • Eigenschaftswerte vom Typ Edm.Binary

  • Eigenschaftswerte vom Typ EdmType.Binary können nicht verzögert werden.

Beispiele

Im nächsten Beispiel wird die JSON-Serialisierung einer leeren Customers-Entitätenmenge aufgezeigt:

{ "d": [ ] }

Im folgenden Beispiel wird die JSON-Serialisierung einer Customers-Entitätenmenge aufgezeigt, die zwei Instanzen des Entitätstpys Customer enthält. Die Customers-bezogenen Bestellungen werden nicht inline erweitert. Hierbei handelt es sich um das Standardverhalten.

{ "d": [ 
    {
        __metadata: {
           uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: "1010 Street",
        Orders: {
            __deferred: {
                uri: "Customers(NTSOS)/Orders"
            }
        }        
    },    
    {
        __metadata: {
            uri: "Customers(FABRK)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "FABRK", 
        CompanyName: "Fabrikam Inc", 
        "2020 Street",
        Orders: {
            __deferred: {
                uri: "Customers(\'FABRK\')/Orders"
            }
        },
    }
  ]
}

Im folgenden Beispiel wird die JSON-Serialisierung eines Customer-Entitätstyps aufgezeigt, der alle verwandten, inline serialisierten Orders enthält.

{ "d": 
{
        __metadata: {
            uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: "1010 Street",
     Orders: [ 
                {
                    __metadata: {
                           uri: "Customers(NTSOS)/Orders", 
                           type: "NorthwindModel.Order" 
                        },
                    ShippedDate: "\/Date(1202321)\/",
                    ShipAddress: "1010 Street",
                    Customers: {
                                  __deferred: {
                                  Uri: "Customers(\'NTSOS\')/Orders/Customers"
                                }
                 }
                 ]
}
}

Im folgenden Beispiel wird die JSON-Serialisierung einer einzelnen Customer-Entitätstypinstanz aufgezeigt, die als Unternehmensnamen eine leere Zeichenfolge und die Adresseigenschaft NULL aufweist:

{ "d": 
{
        __metadata: {
            uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: null,
        Orders: {
            __deferred: {
                uri: "Customers(NTSOS)/Orders"
            }
        }
}
}

Im nächsten Beispiel wird eine JSON-Serialisierung der CustomerID-Eigenschaft für einen Customer-Entitätstyp aufgezeigt, bei dem der Eigenschaftstyp eine Zeichenfolge mit dem Wert NTSOS ist:

"NTSOS"

Dieses Beispiel entspricht dem vorherigen JSON-Beispiel, wobei die angeforderte Serialisierung für den Wert ohne zusätzliche Metadaten gilt. Es sind keine umgebenden JSON-Markups vorhanden.

NTSOS

Siehe auch

Konzepte

JSON-Serialisierungsregeln (ADO.NET Data Services-Framework)
JSON-Format (ADO.NET Data Services-Framework)
Clientanwendungen von ADO.NET Data Services

Weitere Ressourcen

ADO.NET Data Services Framework