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 |
---|---|
changeUnitChange es un valor es una referencia nula (Nothing en Visual Basic).. |
|
changeUnitChange no se encuentra en el cambio que se va a aplicar. |
|
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