Partager via


Énumération ConstraintConflictReason

Représente les raisons pour lesquelles un conflit de contraintes peut se produire.

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

Syntaxe

'Déclaration
Public Enumeration ConstraintConflictReason
'Utilisation
Dim instance As ConstraintConflictReason
public enum ConstraintConflictReason
public enum class ConstraintConflictReason
type ConstraintConflictReason
public enum ConstraintConflictReason

Membres

Nom de membre Description
Other L'élément ou l'unité de modification ne respecte pas une autre contrainte du réplica de destination. Le fournisseur peut éventuellement spécifier l'ID de l'élément en conflit comme ID d'élément en conflit.
Collision L'élément ne peut pas être enregistré car il est en conflit avec un autre élément du magasin, comme un élément qui porte le même nom qu'un élément existant. Le fournisseur doit spécifier l'ID de l'élément de destination comme ID d'élément en conflit.
NoParent L'élément ne peut pas être enregistré dans le magasin de données hiérarchique car l'élément requiert un élément parent qui n'existe pas dans le magasin. Le fournisseur peut éventuellement spécifier l'ID du parent manquant comme ID d'élément en conflit.
Identity Le réplica source et le réplica de destination sont en désaccord sur l'identité d'un élément. Par exemple, le réplica X résout un conflit de collision entre des éléments ayant les ID id1 et id2 en fusionnant les éléments et en attribuant l'ID id1 à l'élément fusionné. Le réplica Y résout un conflit de collision entre des éléments ayant les ID id1 et id2 en renommant l'élément identifié par id1 et en conservant les deux éléments. Le réplica X envoie l'élément fusionné identifié par id1 et un objet tombstone de fusion qui indique que id2 a été fusionné dans id1. Le conflit sur id1 est détecté et résolu en tant que conflit d'accès concurrentiel. Le conflit sur id2 est détecté et signalé à l'application de synchronisation en tant que conflit d'identité en spécifiant Identity comme raison du conflit. L'application détermine s'il faut résoudre le conflit en conservant la modification de la source ou la modification de destination.

Notes

Le fournisseur de destination utilise un membre de l'objet ConstraintConflictReason pour spécifier la raison d'un conflit de contraintes lorsqu'il signale un conflit de contraintes à l'applicateur de modifications. Pour plus d'informations sur les conflits de contraintes, consultez Détection et résolution des conflits de contraintes.

Exemples

L'exemple suivant détecte si un élément nouvellement créé provoque un conflit de contraintes, et retourne la raison du conflit de contraintes appropriée lorsque c'est le cas.

Public Function CanCreateContact(ByVal itemChange As ItemChange, ByVal changeData As String(), ByRef reason As ConstraintConflictReason, ByRef conflictingItemId As SyncId) As Boolean
    Dim canCreate As Boolean = True

    ' Create a temporary contact and see if its index values conflict with any item already in the contact store.
    Dim newContact As New Contact(changeData)
    canCreate = Not DetectIndexCollision(newContact, conflictingItemId)
    If Not canCreate Then
        ' An index collision occurred, so report a collision conflict.
        reason = ConstraintConflictReason.Collision
    Else
        ' This value won't be used because canCreate is set to true in this case.
        reason = ConstraintConflictReason.Other
    End If

    Return canCreate
End Function
public bool CanCreateContact(ItemChange itemChange, string[] changeData, out ConstraintConflictReason reason, out SyncId conflictingItemId)
{
    bool canCreate = true;

    // Create a temporary contact and see if its index values conflict with any item already in the contact store.
    Contact newContact = new Contact(changeData);
    canCreate = !DetectIndexCollision(newContact, out conflictingItemId);
    if (!canCreate)
    {
        // An index collision occurred, so report a collision conflict.
        reason = ConstraintConflictReason.Collision;
    }
    else
    {
        // This value won't be used because canCreate is set to true in this case.
        reason = ConstraintConflictReason.Other;
    }

    return canCreate;
}

Voir aussi

Référence

Espace de noms Microsoft.Synchronization