ConstraintConflictReason Enumeración
Representa los motivos por los que se puede producir un conflicto de restricción.
Espacio de nombres: Microsoft.Synchronization
Ensamblado: Microsoft.Synchronization (en Microsoft.Synchronization.dll)
Sintaxis
'Declaración
Public Enumeration ConstraintConflictReason
'Uso
Dim instance As ConstraintConflictReason
public enum ConstraintConflictReason
public enum class ConstraintConflictReason
type ConstraintConflictReason
public enum ConstraintConflictReason
Miembros
Nombre del miembro | Descripción | |
---|---|---|
Other | El elemento o la unidad de cambio infringe alguna otra restricción de la réplica de destino. El proveedor puede especificar opcionalmente el identificador del elemento en conflicto como identificador de elemento en conflicto. | |
Collision | El elemento no puede guardarse porque está en conflicto con otro elemento en el almacén, como por ejemplo un elemento que tiene el mismo nombre que un elemento existente. El proveedor debe especificar el identificador del elemento de destino como identificador de elemento en conflicto. | |
NoParent | El elemento no se puede guardar en el almacén de datos jerárquico porque es preciso que el elemento disponga de un elemento primario que no existe en el almacén. El proveedor puede especificar opcionalmente el identificador del elemento primario perdido como identificador de elemento en conflicto. | |
Identity | La réplica de origen y la réplica de destino discrepan sobre la identidad de un elemento. Por ejemplo, la réplica X resuelve un conflicto de colisión entre los elementos con identificadores id1 e id2, para lo cual combina los elementos y asigna id1 al elemento combinado. La réplica Y resuelve un conflicto de colisión entre los elementos con identificadores id1 e id2, para ello, cambia el nombre del elemento que identifica id1 y conserva ambos elementos. La réplica X envía el elemento combinado que identifica id1 y un marcador de exclusión de combinación que indica que id2 se ha combinado en id1. Se detecta el conflicto en id1 y se resuelve como un conflicto de simultaneidad. Se detecta el conflicto en id2 y se notifica a la aplicación de sincronización como un conflicto de identidad, especificando que el motivo del conflicto es Identity. La aplicación determina si se ha de resolver el conflicto conservando el cambio de origen o el cambio de destino. |
Notas
El proveedor de destino utiliza un miembro de ConstraintConflictReason para especificar el motivo de un conflicto de restricción cuando notifica un conflicto de restricción al aplicador de cambios. Para obtener más información sobre conflictos de restricción, vea Detectar y resolver conflictos de restricción.
Ejemplos
En el ejemplo siguiente se detecta si un elemento creado recientemente produce un conflicto de restricción, y se devuelve el motivo del conflicto de restricción cuando se detecta alguno.
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;
}