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 |
---|---|
changeUnitChange é referência nula (Nothing no Visual Basic). |
|
changeUnitChange não foi encontrado na alteração a ser aplicada. |
|
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