Compartir a través de


SaveChangeWithChangeUnitsContext.RecordConstraintConflictForChangeUnit Método

Notifica, para un cambio que contiene unidades de cambio, que se produjo un conflicto de restricción cuando el proveedor de destino intentó aplicar el cambio a la réplica de destino.

Espacio de nombres: Microsoft.Synchronization
Ensamblado: Microsoft.Synchronization (en microsoft.synchronization.dll)

Sintaxis

'Declaración
Public Sub RecordConstraintConflictForChangeUnit ( _
    changeUnitChange As ChangeUnitChange _
)
'Uso
Dim instance As SaveChangeWithChangeUnitsContext
Dim changeUnitChange As ChangeUnitChange

instance.RecordConstraintConflictForChangeUnit(changeUnitChange)
public void RecordConstraintConflictForChangeUnit (
    ChangeUnitChange changeUnitChange
)
public:
void RecordConstraintConflictForChangeUnit (
    ChangeUnitChange^ changeUnitChange
)
public void RecordConstraintConflictForChangeUnit (
    ChangeUnitChange changeUnitChange
)
public function RecordConstraintConflictForChangeUnit (
    changeUnitChange : ChangeUnitChange
)

Parámetros

  • changeUnitChange
    Unidad de cambio de la réplica de destino que está en conflicto con la unidad de cambio que se va a aplicar.

Excepciones

Tipo de excepción Condición

ArgumentNullException

changeUnitChange es un valor es una referencia nula (Nothing en Visual Basic)..

ArgumentException

changeUnitChange no se encuentra en el cambio que se va a aplicar.

SyncInvalidOperationException

Un conflicto de restricción o error recuperable ya se ha establecido en este objeto.

Notas

Un conflicto de restricción se produce cuando un proveedor de destino intenta aplicar un cambio a la réplica de destino y dicho cambio infringe una restricción de la réplica de destino. Para las unidades de cambio, esto significa normalmente que el cambio infringe alguna lógica de negocio en la réplica de destino. Considérese como ejemplo de conflicto de lógica de negocio una réplica de fidelidad baja que almacene dos unidades de cambio: name y country. Considere también una réplica de fidelidad alta que almacene tres unidades de cambio: name, state/province y country. La réplica de fidelidad alta contiene una lógica de negocio que comprueba el campo state/province frente al campo country y no almacenará los cambios que no pasen la comprobación. La réplica de fidelidad baja actúa como origen y envía un elemento con country establecido en "EE. UU.". El proveedor de destino intenta aplicar el cambio a la réplica de fidelidad alta, pero en esta réplica el elemento contiene "Colombia Británica" en su campo state/province. Por consiguiente, el cambio infringe la lógica de negocio y produce un conflicto de restricción en la unidad de cambio que representa el campo state/province.

Cuando el proveedor de destino utiliza este método para notificar un conflicto de restricción, el aplicador de cambios resuelve el conflicto según la acción de resolución de conflictos establecida por la aplicación para el conflicto especificado. A continuación, el aplicador de cambios envía todas las llamadas necesarias al proveedor de destino para que este pueda aplicar el conflicto resuelto a la réplica de destino. Para obtener más información, vea Detectar y resolver conflictos de restricción.

Ejemplo

En el ejemplo siguiente se comprueba si se puede actualizar una unidad de cambio en la réplica de destino. Cuando la unidad de cambio no se puede actualizar, se registra un conflicto de restricción para la unidad de cambio.

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;
}

Vea también

Referencia

SaveChangeWithChangeUnitsContext Clase
SaveChangeWithChangeUnitsContext Miembros
Microsoft.Synchronization Espacio de nombres