Partager via


RecordConstraintConflictForChangeUnit méthode

Signale qu'un conflit de contraintes s'est produit lorsque le fournisseur de destination a essayé d'appliquer la modification au réplica de destination, pour une modification qui contient des unités de modification.

Espace de noms :  Microsoft.Synchronization
Assembly :  Microsoft.Synchronization (dans Microsoft.Synchronization.dll)

Syntaxe

'Déclaration
Public Sub RecordConstraintConflictForChangeUnit ( _
    changeUnitChange As ChangeUnitChange _
)
'Utilisation
Dim instance As SaveChangeWithChangeUnitsContext
Dim changeUnitChange As ChangeUnitChange

instance.RecordConstraintConflictForChangeUnit(changeUnitChange)
public void RecordConstraintConflictForChangeUnit(
    ChangeUnitChange changeUnitChange
)
public:
void RecordConstraintConflictForChangeUnit(
    ChangeUnitChange^ changeUnitChange
)
member RecordConstraintConflictForChangeUnit : 
        changeUnitChange:ChangeUnitChange -> unit 
public function RecordConstraintConflictForChangeUnit(
    changeUnitChange : ChangeUnitChange
)

Paramètres

Exceptions

Exception Condition
ArgumentNullException

changeUnitChange est une Null.

ArgumentException

changeUnitChange est introuvable dans la modification à appliquer.

SyncInvalidOperationException

Un conflit de contraintes ou une erreur récupérable a déjà été défini sur cet objet.

Notes

Un conflit de contraintes se produit lorsqu'un fournisseur de destination essaie d'appliquer une modification au réplica de destination, et que cette modification ne respecte pas une contrainte du réplica de destination. Pour les unités de modification, cela signifie généralement que la modification ne respecte pas une logique métier sur le réplica de destination. Pour illustrer un conflit de logique métier, prenons un réplica à fidélité faible qui stocke deux unités de modification : name et country. Prenons également un réplica à fidélité élevée qui stocke trois unités de modification : name, state/province et country. Le réplica à fidélité élevée contient la logique métier qui vérifie le champ state/province par rapport au champ country, et ne stockera pas une modification qui ne passe pas le contrôle avec succès. Le réplica à fidélité faible joue le rôle de source et envoie un élément avec « USA » comme valeur de country. Le fournisseur de destination essaie d'appliquer la modification au réplica à fidélité élevée, mais sur ce dernier, le champ state/province de l'élément contient « Colombie britannique ». Par conséquent, la modification ne respecte pas la logique métier et provoque un conflit de contraintes sur l'unité de modification qui représente le champ state/province.

Lorsque le fournisseur de destination utilise cette méthode pour signaler un conflit de contraintes, l'applicateur de modifications résout le conflit en fonction de l'action de résolution de conflit définie par l'application pour le conflit spécifié. L'applicateur de modifications distribue ensuite tous les appels nécessaires au fournisseur de destination afin que celui-ci puisse appliquer le conflit résolu au réplica de destination. Pour plus d'informations, consultez Détection et résolution des conflits de contraintes.

Exemples

L'exemple suivant vérifie si une unité de modification peut être mise à jour dans le réplica de destination. Lorsque l'unité de modification ne peut pas être mise à jour, un conflit de contraintes est enregistré pour l'unité de modification.

Case SaveChangeAction.UpdateVersionAndData
    If True Then
        ' Update the item store and metadata store for the specified change unit.
        Try
            Dim cuData As String = DirectCast(context.ChangeData, String())(cuChange.ChangeUnitId.GetByteId())

            If _ContactStore.CanUpdateContact(change.ItemId, cuChange.ChangeUnitId, cuData) Then
                _ContactStore.UpdateContactFromSync(change, cuChange, cuData)
            Else
                context.RecordConstraintConflictForChangeUnit(cuChange)

            End If
        Catch ex As Exception
            Dim errData As New RecoverableErrorData(ex)
            context.RecordRecoverableErrorForChangeUnit(cuChange, errData)
        End Try
        Exit Select
    End If
case SaveChangeAction.UpdateVersionAndData:
{
    // Update the item store and metadata store for the specified change unit.
    try
    {
        string cuData = ((string[])context.ChangeData)[cuChange.ChangeUnitId.GetByteId()];

        if (_ContactStore.CanUpdateContact(change.ItemId, cuChange.ChangeUnitId, cuData))
        {
            _ContactStore.UpdateContactFromSync(change, cuChange, cuData);
        }
        else
        {
            context.RecordConstraintConflictForChangeUnit(cuChange);
        }

    }
    catch (Exception ex)
    {
        RecoverableErrorData errData = new RecoverableErrorData(ex);
        context.RecordRecoverableErrorForChangeUnit(cuChange, errData);
    }
    break;
}

Voir aussi

Référence

SaveChangeWithChangeUnitsContext Classe

Membres SaveChangeWithChangeUnitsContext

Espace de noms Microsoft.Synchronization