Delen via


Procedure: Conflicten oplossen door databasewaarden te behouden

Als u de verschillen tussen de verwachte en de werkelijke databasewaarden wilt afstemmen voordat u de wijzigingen opnieuw probeert in te dienen, kunt u de OverwriteCurrentValues waarden in de database behouden. De huidige waarden in het objectmodel worden vervolgens overschreven. Zie Optimistische gelijktijdigheid voor meer informatie: Overzicht.

Notitie

In alle gevallen wordt de record op de client eerst vernieuwd door de bijgewerkte gegevens uit de database op te halen. Met deze actie zorgt u ervoor dat de volgende update niet mislukt bij dezelfde gelijktijdigheidscontroles.

Opmerking

In dit scenario wordt een ChangeConflictException uitzondering gegenereerd wanneer Gebruiker1 probeert wijzigingen in te dienen, omdat Gebruiker2 ondertussen de kolommen Assistent en Afdeling heeft gewijzigd. In de volgende tabel ziet u de situatie.

Provincie Manager Assistent Afdeling
De oorspronkelijke databasestatus wordt opgevraagd door Gebruiker1 en Gebruiker2. Alfreds Maria Verkoop
Gebruiker1 bereidt zich voor om deze wijzigingen in te dienen. Alfred Marketing
Gebruiker2 heeft deze wijzigingen al ingediend. Mary Service

Gebruiker1 besluit dit conflict op te lossen door de nieuwere databasewaarden de huidige waarden in het objectmodel te laten overschrijven.

Wanneer Gebruiker1 het conflict oplost met behulp van OverwriteCurrentValues, is het resultaat in de database als volgt in de tabel:

Provincie Manager Assistent Afdeling
Nieuwe status na conflictoplossing. Alfreds

(origineel)
Mary

(van Gebruiker2)
Service

(van Gebruiker2)

In de volgende voorbeeldcode ziet u hoe u de huidige waarden in het objectmodel overschrijft met de databasewaarden. (Er treedt geen inspectie of aangepaste verwerking van afzonderlijke lidconflicten op.)

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

Zie ook