Partager via


Classe ChangeOperationResponse

Résultats retournés après un appel à SaveChanges lors de l'énumération des réponses d'opération retournées par la classe DataServiceResponse.

Hiérarchie d'héritage

System.Object
  System.Data.Services.Client.OperationResponse
    System.Data.Services.Client.ChangeOperationResponse

Espace de noms :  System.Data.Services.Client
Assembly :  Microsoft.Data.Services.Client (en Microsoft.Data.Services.Client.dll)

Syntaxe

'Déclaration
Public NotInheritable Class ChangeOperationResponse _
    Inherits OperationResponse
'Utilisation
Dim instance As ChangeOperationResponse
public sealed class ChangeOperationResponse : OperationResponse
public ref class ChangeOperationResponse sealed : public OperationResponse
[<SealedAttribute>]
type ChangeOperationResponse =  
    class
        inherit OperationResponse
    end
public final class ChangeOperationResponse extends OperationResponse

Le type ChangeOperationResponse expose les membres suivants.

Propriétés

  Nom Description
Propriété publique Descriptor Obtient le EntityDescriptor ou le LinkDescriptor modifié par une opération de modification.
Propriété publique Error Obtient l'erreur résultant de l'opération. (hérité de OperationResponse.)
Propriété publique Headers Une fois substituée dans une classe dérivée, contient les en-têtes de réponse HTTP associés à une opération unique. (hérité de OperationResponse.)
Propriété publique StatusCode Une fois substituée dans une classe dérivée, obtient ou définit le code de réponse HTTP associé à une opération unique. (hérité de OperationResponse.)

Haut de la page

Méthodes

  Nom Description
Méthode publique Equals (hérité de Object.)
Méthode protégée Finalize (hérité de Object.)
Méthode publique GetHashCode (hérité de Object.)
Méthode publique GetType (hérité de Object.)
Méthode protégée MemberwiseClone (hérité de Object.)
Méthode publique ToString (hérité de Object.)

Haut de la page

Notes

Les objets ChangeOperationResponse ne sont pas destinés à être construits directement par un utilisateur de cette bibliothèque. À la place, les références sont retournées lors de l'énumération des réponses d'opération retournées via l'énumérateur pour la classe DataServiceResponse.

SaveChanges soumet au service de données les modifications en attente collectées par le DataServiceContext depuis le dernier appel de SaveChanges. Les modifications sont ajoutées au contexte en appelant AddObject, AddLink, DeleteObject, DeleteLink, Detach, DetachLink, et les méthodes similaires.

SaveChanges retourne un DataServiceResponse qui représente la réponse à toutes les opérations envoyées au service de données. L'objet DataServiceResponse inclut une séquence d'objets ChangeOperationResponse qui, à leur tour, contiennent une séquence d'instances EntityDescriptor ou LinkDescriptor représentant les modifications qui ont été tentées ou rendues persistantes.

Exemples

Le code suivant montre comment traiter les résultats d'un appel de SaveChanges.

DataServiceContext service = new DataServiceContext(new Uri("http://myserviceroot"));

// Do insert, update, delete, or attach operations.

DataServiceResponse dsr;

try
{
    dsr = service.SaveChanges(SaveChangesOptions.Batch);  
   // Or service.SaveChanges(SaveChangesOptions.ContinueOnError); 
   //Or service.SaveChanges();
   // If there are no errors during save changes, process the results:

    if (dsr.IsBatchResponse)
    {
           /*inspect HTTP artifacts associated with the entire batch:
                             dsr.BatchHeaders, dsr.BatchStatusCode*/ }

    foreach (ChangeOperationResponse cor in dsr)
    {
        
            if (cor.Descriptor is EntityDescriptor)
            {
                EntityDescriptor ed = (EntityDescriptor)cor.Descriptor;
                // This should be the case if
                // SaveChanges did not throw an exception.  

                // After an entity is processed by SaveChanges,
                // it is always moved to the unchanged state.
                System.Diagnostics.Debug.Assert(
                           ed.State == EntityStates.Unchanged);  
                // This shows that the state should be unchanged if
                // the result is success.
               
                //process the entity in the response payload: ed.Entity
            }
            else if (cor.Descriptor is LinkDescriptor)
            {
                LinkDescriptor ld = (LinkDescriptor)cor.Descriptor;
               // This should be the case if SaveChanges did not throw an exception.

               // After an entity is processed by SaveChanges it
               // is always moved to the unchanged state.
                System.Diagnostics.Debug.Assert(
                            ld.State == EntityStates.Unchanged);  
                // The state should be unchanged if the result is success.
               
                //process the link in the response payload: ld.Source,
                // ld.SourceProperty, or ld.Target.
            }
     }
    
}
catch (DataServiceSaveException se)
{
    // Error while saving changes
    dsr = se.Response;

    if (dsr.IsBatchResponse) 
    { 
        /*inspect HTTP artifacts associated with the entire batch:
             dsr.BatchHeaders, dsr.BatchStatusCode*/ 
}    
}

    foreach (ChangeOperationResponse cor in dsr)
    {
        if (cor.Error != null)
        {
            //process error
        }
        else
        {
            // same success case processing as in the loop over DSRs results in 
            // the try block. You could put that processing in a method 
            // and call it from here.    
        }
    }

}

 catch(Exception)
 {
    // Error while saving changes, but not thrown by the client library.

    // Process ArgumentException, InvalidOperationException, or similar.
}
}

Sécurité des threads

Tous les membres publics static (Shared dans Visual Basic) de ce type sont thread-safe. Tous les membres de l'instance ne sont pas garantis comme étant thread-safe.

Voir aussi

Référence

Espace de noms System.Data.Services.Client