Freigeben über


Gewusst wie: Beheben von Parallelitätskonflikten durch das Erhalten von Datenbankwerten (LINQ to SQL)

Aktualisiert: November 2007

Wenn Sie Unterschiede zwischen den erwarteten und den tatsächlichen Datenbankwerten ausgleichen möchten, bevor Sie versuchen, Ihre Änderungen erneut zu übergeben, können Sie die Datenbankwerte mithilfe von OverwriteCurrentValues erhalten. Die aktuellen Werte im Objektmodell werden dann überschrieben. Weitere Informationen finden Sie unter Vollständige Parallelität – Übersicht (LINQ to SQL).

Hinweis:

In allen Fällen wird der Datensatz auf dem Client erst durch Abrufen der geänderten Daten aus der Datenbank aktualisiert. Diese Aktion stellt sicher, dass der nächste Aktualisierungsversuch nicht bei den gleichen Parallelitätsprüfungen fehlschlägt.

Beispiel

In diesem Szenario wird eine ChangeConflictException-Ausnahme ausgelöst, wenn User1 versucht, Änderungen zu übergeben, da User2 zwischenzeitlich die Assistant-Spalte und die Department-Spalte geändert hat. Die folgende Tabelle zeigt die Situation.

 

Manager

Assistant

Department

Ursprünglicher Datenbankzustand bei Abfrage durch User1 und User2.

Alfreds

Maria

Sales

User1 bereitet sich auf die Übergabe dieser Änderungen vor.

Alfred

 

Marketing

User2 hat diese Änderungen bereits übergeben.

 

Mary

Service

User1 entscheidet sich, diesen Konflikt zu beheben, indem die neueren Datenbankwerte die aktuellen Werte im Objektmodell überschreiben.

Wenn User1 den Konflikt durch Verwendung von OverwriteCurrentValues behebt, entspricht das Ergebnis in der Datenbank der folgenden Tabelle:

 

Manager

Assistant

Department

Neuer Zustand nach Konfliktlösung.

Alfreds

(Original)

Mary

(von User2)

Service

(von User2)

Im folgenden Beispielcode wird gezeigt, wie die aktuellen Werte im Objektmodell mit den Datenbankwerten überschrieben werden. (Keine Inspektion oder benutzerdefinierte Behandlung einzelner Memberkonflikte.)

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' All database values overwrite current values.
        occ.Resolve(Data.Linq.RefreshMode.OverwriteCurrentValues)
    Next

End Try
Northwnd db = new Northwnd("...");
try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        // All database values overwrite current values.
        occ.Resolve(RefreshMode.OverwriteCurrentValues);
    }
}

Siehe auch

Weitere Ressourcen

Gewusst wie: Verwalten von Änderungskonflikten (LINQ to SQL)