Freigeben über


DbConflictType-Enumeration

Definiert die Arten von Konflikten, die während der Synchronisierung auftreten können.

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

Syntax

'Declaration
Public Enumeration DbConflictType
'Usage
Dim instance As DbConflictType
public enum DbConflictType
public enum class DbConflictType
type DbConflictType
public enum DbConflictType

Member

Membername Beschreibung
ErrorsOccurred Beim Übernehmen einer Änderung hat die Peerdatenbank eine Ausnahme ausgelöst.
LocalUpdateRemoteUpdate Lokaler und Remotepeer haben beide dieselbe Zeile aktualisiert.
LocalUpdateRemoteDelete Der lokale Peer hat eine Zeile aktualisiert, die vom Remotepeer gelöscht wurde.
LocalDeleteRemoteUpdate Der lokale Peer hat eine Zeile gelöscht, die vom Remotepeer aktualisiert wurde.
LocalInsertRemoteInsert Lokaler und Remotepeer haben beide eine Zeile eingefügt, die über denselben Primärschlüsselwert verfügt. Dies führt zu einer Primärschlüsselverletzung.
LocalDeleteRemoteDelete Lokaler und Remotepeer haben beide dieselbe Zeile gelöscht.
LocalCleanedupDeleteRemoteUpdate Der lokale Peer hat eine Zeile gelöscht, die vom Remotepeer aktualisiert wurde, und die Metadaten für diese Zeile wurden bereinigt.

Hinweise

In Sync Framework werden Konflikte und Fehler auf Zeilenebene erkannt. Eine Zeile befindet sich im Konflikt, wenn sie zwischen den Synchronisierungen an mehr als einem Knoten geändert wurde. Fehler während der Synchronisierung entstehen in der Regel aus einer Einschränkungsverletzung, z. B. einem doppelten Primärschlüssel. Weitere Informationen finden Sie unter Vorgehensweise: Behandeln von Datenkonflikten und Fehlern bei der Datenbanksynchronisierung (SQL Server).

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Aktualisierungskonflikte in einem ApplyChangeFailed-Ereignishandler verarbeitet werden können. In dem Beispiel werden die miteinander in Konflikt stehenden Zeilen in der Konsole mit der Auswahlmöglichkeit angezeigt, welche Zeile in dem Konflikt Vorrang haben soll. Eine Darstellung dieses Codes im Kontext eines vollständigen Beispiels finden Sie unter Vorgehensweise: Behandeln von Datenkonflikten und Fehlern bei der Datenbanksynchronisierung (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

Siehe auch

Verweis

Microsoft.Synchronization.Data-Namespace