Поделиться через


Метод SaveChangeWithChangeUnitsContext.RecordConstraintConflictForChangeUnit

Сообщает о конфликте ограничений, возникшем, когда поставщик назначения применял в реплике назначения изменение, содержащее базовые единицы.

Пространство имен: Microsoft.Synchronization
Сборка: Microsoft.Synchronization (в microsoft.synchronization.dll)

Синтаксис

'Декларация
Public Sub RecordConstraintConflictForChangeUnit ( _
    changeUnitChange As ChangeUnitChange _
)
'Применение
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
)

Параметры

  • changeUnitChange
    Базовая единица реплики назначения, конфликтующая с применяемой базовой единицей.

Исключения

Тип исключения Условие

ArgumentNullException

Параметр changeUnitChange равен пустая ссылка (Nothing в Visual Basic).

ArgumentException

Параметр changeUnitChange не найден в применяемом изменении.

SyncInvalidOperationException

Для этого объекта уже установлен конфликт ограничения или устранимая ошибка.

Замечания

Конфликт ограничений происходит, когда поставщик назначения применяет в реплике назначения изменение, которое нарушает ограничение реплики назначения. Для базовых единиц это обычно означает, что изменение нарушает бизнес-логику в реплике назначения. В качестве примера конфликта бизнес-логики рассмотрим реплику низкой достоверности, в которой хранятся две базовые единицы: name и country. Также рассмотрим реплику высокой достоверности, в которой хранятся три базовые единицы: name, state/province и country. Реплика высокой достоверности содержит бизнес-логику, которая проверяет значение поля state/province по значению поля country и не сохраняет изменение, не прошедшее проверку. Реплика низкой достоверности выступает в качестве источника и отправляет элемент, в котором поле country имеет значение «USA». Поставщик назначения применяет изменение в реплике высокой достоверности, однако в этой реплике поле state/province элемента имеет значение «British Columbia». Поэтому изменение нарушает бизнес-логику и вызывает конфликт ограничений в базовой единице, представляющей поле state/province.

Если поставщик назначения использует этот метод для сообщения о конфликте ограничений, то объект применения изменений разрешает конфликт, выполняя действие по устранению конфликтов, которое задано приложением для данного типа конфликта. Затем объект применения изменений отправляет все необходимые вызовы поставщику назначения, чтобы он применил результаты разрешения конфликта на реплике назначения. Дополнительные сведения см. в разделе Обнаружение и разрешение конфликтов ограничений.

Пример

В следующем примере выполняется проверка возможности обновления базовой единицы в реплике назначения. Если базовую единицу обновить нельзя, то для базовой единицы записывается конфликт ограничения.

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

См. также

Справочник

Класс SaveChangeWithChangeUnitsContext
Элементы SaveChangeWithChangeUnitsContext
Пространство имен Microsoft.Synchronization