Compartilhar via


Método SaveChangeWithChangeUnitsContext.RecordConstraintConflictForChangeUnit

Relata que ocorreu um conflito de restrição quando o provedor de destino tentou aplicar a alteração à réplica de destino, para uma alteração que contém unidades de alteração.

Namespace: Microsoft.Synchronization
Assembly: Microsoft.Synchronization (em microsoft.synchronization.dll)

Sintaxe

'Declaração
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
    A unidade de alteração na réplica de destino que está em conflito com a unidade de alteração a ser aplicada.

Exceções

Tipo de exceção Condição

ArgumentNullException

changeUnitChange é referência nula (Nothing no Visual Basic).

ArgumentException

changeUnitChange não foi encontrado na alteração a ser aplicada.

SyncInvalidOperationException

Um conflito de restrição ou erro recuperável já foi definido nesse objeto.

Comentários

Um conflito de restrição ocorre quando um provedor de destino tenta aplicar uma alteração na réplica de destino, e essa alteração viola uma restrição da réplica de destino. Para unidades de alteração, normalmente, isso significa que a alteração viola algumas lógicas de negócios na réplica de destino. Como exemplo de um conflito de lógica corporativa, considere uma réplica de baixa-fidelidade que armazene duas unidades de alteração: name e country. Considere também uma réplica de baixa fidelidade que armazene três unidades de alteração: name, state/province e country. A réplica de alta fidelidade contém lógica corporativa que verifica o campo state/province em relação ao campo country e não armazenará uma alteração que não seja aprovada na verificação. A réplica da baixa fidelidade age como a origem e envia um item com country definido como "EUA". O provedor de destino tenta aplicar a alteração à réplica de alta fidelidade, porém, nessa réplica, o item contém "Columbia Britânica" em seu campo state/province. Portanto, a alteração viola a lógica de negócios e causa um conflito de restrição na unidade de alteração que representa o campo state/province.

Quando o provedor de destino usa esse método para relatar um conflito de restrição, o aplicador de alterações resolve o conflito de acordo com a ação de resolução de conflitos definida pelo aplicativo para o conflito especificado. O aplicador de alterações então despacha as chamadas necessárias para o provedor de destino, para que este possa aplicar o conflito resolvido à réplica de destino. Para obter mais informações, consulte Detectando e solucionando conflitos de restrição.

Exemplo

O exemplo a seguir verifica se uma unidade de alteração pode ser atualizada na réplica de destino. Quando a unidade de alteração não pode ser atualizada, um conflito de restrição é registrado para a unidade de alteração.

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

Consulte também

Referência

Classe SaveChangeWithChangeUnitsContext
Membros SaveChangeWithChangeUnitsContext
Namespace Microsoft.Synchronization