MemoryConflictLog::SaveConstraintConflict Method

Saves information about a change that caused a constraint conflict.

Namespace:  Microsoft.Synchronization
Assembly:  Microsoft.Synchronization (in Microsoft.Synchronization.dll)

public:
virtual void SaveConstraintConflict(
	ItemChange^ conflictingChange, 
	SyncId^ conflictingItemId, 
	ConstraintConflictReason reason, 
	Object^ conflictingChangeData, 
	SyncKnowledge^ conflictingChangeKnowledge, 
	bool temporary
) sealed

Parameters

conflictingChange
Type: Microsoft.Synchronization::ItemChange
The item metadata for the conflicting change from the source provider.
conflictingItemId
Type: Microsoft.Synchronization::SyncId
The item ID of the item in the destination replica that conflicts with the item specified by conflictingChange.
reason
Type: Microsoft.Synchronization::ConstraintConflictReason
The reason the conflict occurred.
conflictingChangeData
Type: System::Object
The item data for the conflicting change.
conflictingChangeKnowledge
Type: Microsoft.Synchronization::SyncKnowledge
The knowledge to be learned if this change is applied. This must be saved with the change.
temporary
Type: System::Boolean
true if this is a temporary conflict. Otherwise, false.

Implements

IConflictLogWriter::SaveConstraintConflict(ItemChange, SyncId, ConstraintConflictReason, Object, SyncKnowledge, Boolean)

ExceptionCondition
ArgumentNullException

conflictingChange or conflictingChangeKnowledge is a nullptr.

The conflict is saved to the in-memory conflict log. To save the conflict after synchronization completes, call Persist.

The following example shows how to save a temporary constraint conflict by using a MemoryConflictLog object.

Public Sub SaveConstraintConflict(ByVal conflictingChange As ItemChange, ByVal conflictingItemId As SyncId, ByVal reason As ConstraintConflictReason, ByVal conflictingChangeData As Object, ByVal conflictingChangeKnowledge As SyncKnowledge, ByVal temporary As Boolean) Implements INotifyingChangeApplierTarget2.SaveConstraintConflict
    If Not temporary Then
        ' The in-memory conflict log is used, so if a non-temporary conflict is saved, it's
        ' an error.
        Throw New NotImplementedException("SaveConstraintConflict can only save temporary conflicts.")
    Else
        ' For temporary conflicts, just pass on the data and let the conflict log handle it.
        _memConflictLog.SaveConstraintConflict(conflictingChange, conflictingItemId, reason, conflictingChangeData, conflictingChangeKnowledge, temporary)
    End If
End Sub


public void SaveConstraintConflict(ItemChange conflictingChange, SyncId conflictingItemId, 
    ConstraintConflictReason reason, object conflictingChangeData, SyncKnowledge conflictingChangeKnowledge, 
    bool temporary)
{
    if (!temporary)
    {
        // The in-memory conflict log is used, so if a non-temporary conflict is saved, it's
        // an error.
        throw new NotImplementedException("SaveConstraintConflict can only save temporary conflicts.");
    }
    else
    {
        // For temporary conflicts, just pass on the data and let the conflict log handle it.
        _memConflictLog.SaveConstraintConflict(conflictingChange, conflictingItemId, reason, 
            conflictingChangeData, conflictingChangeKnowledge, temporary);
    }
}


Show: