Compartilhar via


Enumeração DbConflictType

Define os tipos de conflitos que podem ocorrer durante a sincronização.

Namespace:  Microsoft.Synchronization.Data
Assembly:  Microsoft.Synchronization.Data (em Microsoft.Synchronization.Data.dll)

Sintaxe

'Declaração
Public Enumeration DbConflictType
'Uso
Dim instance As DbConflictType
public enum DbConflictType
public enum class DbConflictType
type DbConflictType
public enum DbConflictType

Membros

Nome do membro Descrição
ErrorsOccurred O banco de dados par lançou uma exceção ao aplicar uma alteração.
LocalUpdateRemoteUpdate Os pares local e remoto atualizaram a mesma linha.
LocalUpdateRemoteDelete O par local atualizou uma linha que foi excluída pelo par remoto.
LocalDeleteRemoteUpdate O par local excluiu uma linha que foi atualizada pelo par remoto.
LocalInsertRemoteInsert Os pares local e remoto inseriram uma linha com o mesmo valor de chave primária. Isso provocou uma violação de chave primária.
LocalDeleteRemoteDelete Os pares local e remoto excluíram a mesma linha.
LocalCleanedupDeleteRemoteUpdate O par local excluiu uma linha que o par remoto atualizou e os metadados dessa linha foram limpos.

Comentários

No Sync Framework, os conflitos e erros são detectados no nível da linha. Uma linha está em conflito quando esta é alterada em mais de um nó entre as sincronizações. Normalmente, os erros que ocorrem durante a sincronização envolvem uma violação de restrição, por exemplo, uma chave primária duplicada. Para obter mais informações, consulte Como manipular conflitos de dados e erros de sincronização de bancos de dados (SQL Server).

Exemplos

O exemplo de código a seguir mostra como podem ser processados conflitos de atualização/atualização em um manipulador de eventos ApplyChangeFailed. No exemplo, as linhas conflitantes são exibidas no console com uma opção para especificar qual linha deveria ganhar o conflito. Para exibir esse código no contexto de um exemplo completo, consulte Como manipular conflitos de dados e erros de sincronização de bancos de dados (SQL Server).

localProvider.ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(dbProvider_ApplyChangeFailed);
remoteProvider.ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(dbProvider_ApplyChangeFailed);
if (e.Conflict.Type == DbConflictType.LocalUpdateRemoteUpdate)
{

    //Get the conflicting changes from the Conflict object
    //and display them. The Conflict object holds a copy
    //of the changes; updates to this object will not be 
    //applied. To make changes, use the Context object.
    DataTable conflictingRemoteChange = e.Conflict.RemoteChange;
    DataTable conflictingLocalChange = e.Conflict.LocalChange;
    int remoteColumnCount = conflictingRemoteChange.Columns.Count;
    int localColumnCount = conflictingLocalChange.Columns.Count;

    Console.WriteLine(String.Empty);
    Console.WriteLine(String.Empty);
    Console.WriteLine("Row from database " + DbConflictDetected);
    Console.Write(" | ");

    //Display the local row. As mentioned above, this is the row
    //from the database at which the conflict was detected.
    for (int i = 0; i < localColumnCount; i++)
    {
        Console.Write(conflictingLocalChange.Rows[0][i] + " | ");
    }

    Console.WriteLine(String.Empty);
    Console.WriteLine(String.Empty);
    Console.WriteLine(String.Empty);
    Console.WriteLine("Row from database " + DbOther);
    Console.Write(" | ");

    //Display the remote row.
    for (int i = 0; i < remoteColumnCount; i++)
    {
        Console.Write(conflictingRemoteChange.Rows[0][i] + " | ");
    }

    //Ask for a conflict resolution option.
    Console.WriteLine(String.Empty);
    Console.WriteLine(String.Empty);
    Console.WriteLine("Enter a resolution option for this conflict:");
    Console.WriteLine("A = change from " + DbConflictDetected + " wins.");
    Console.WriteLine("B = change from " + DbOther + " wins.");

    string conflictResolution = Console.ReadLine();
    conflictResolution.ToUpper();

    if (conflictResolution == "A")
    {
        e.Action = ApplyAction.Continue;
    }

    else if (conflictResolution == "B")
    {
        e.Action = ApplyAction.RetryWithForceWrite;
    }

    else
    {
        Console.WriteLine(String.Empty);
        Console.WriteLine("Not a valid resolution option.");
    }
}
AddHandler localProvider.ApplyChangeFailed, AddressOf dbProvider_ApplyChangeFailed
AddHandler remoteProvider.ApplyChangeFailed, AddressOf dbProvider_ApplyChangeFailed
If e.Conflict.Type = DbConflictType.LocalUpdateRemoteUpdate Then

    'Get the conflicting changes from the Conflict object
    'and display them. The Conflict object holds a copy
    'of the changes; updates to this object will not be 
    'applied. To make changes, use the Context object.
    Dim conflictingRemoteChange As DataTable = e.Conflict.RemoteChange
    Dim conflictingLocalChange As DataTable = e.Conflict.LocalChange
    Dim remoteColumnCount As Integer = conflictingRemoteChange.Columns.Count
    Dim localColumnCount As Integer = conflictingLocalChange.Columns.Count

    Console.WriteLine(String.Empty)
    Console.WriteLine(String.Empty)
    Console.WriteLine("Row from database " & DbConflictDetected)
    Console.Write(" | ")

    'Display the local row. As mentioned above, this is the row
    'from the database at which the conflict was detected.
    Dim i As Integer
    For i = 0 To localColumnCount - 1
        Console.Write(conflictingLocalChange.Rows(0)(i).ToString & " | ")
    Next i

    Console.WriteLine(String.Empty)
    Console.WriteLine(String.Empty)
    Console.WriteLine(String.Empty)
    Console.WriteLine("Row from database " & DbOther)
    Console.Write(" | ")

    'Display the remote row.
    For i = 0 To remoteColumnCount - 1
        Console.Write(conflictingRemoteChange.Rows(0)(i).ToString & " | ")
    Next i

    'Ask for a conflict resolution option.
    Console.WriteLine(String.Empty)
    Console.WriteLine(String.Empty)
    Console.WriteLine("Enter a resolution option for this conflict:")
    Console.WriteLine("A = change from " & DbConflictDetected & " wins.")
    Console.WriteLine("B = change from " & DbOther & " wins.")

    Dim conflictResolution As String = Console.ReadLine()
    conflictResolution.ToUpper()

    If conflictResolution = "A" Then
        e.Action = ApplyAction.Continue

    ElseIf conflictResolution = "B" Then
        e.Action = ApplyAction.RetryWithForceWrite

    Else
        Console.WriteLine(String.Empty)
        Console.WriteLine("Not a valid resolution option.")
    End If

Consulte também

Referência

Namespace Microsoft.Synchronization.Data