Dela via


Anvisningar: Lösa konflikter genom att skriva över databasvärden

Om du vill stämma av skillnader mellan förväntade och faktiska databasvärden innan du försöker skicka ändringarna på nytt kan du använda KeepCurrentValues för att skriva över databasvärden. Mer information finns i Optimistisk samtidighet: Översikt.

Kommentar

I samtliga fall uppdateras posten på klienten först genom att de uppdaterade data hämtas från databasen. Den här åtgärden ser till att nästa uppdateringsförsök inte misslyckas vid samma samtidighetskontroller.

Exempel

I det här scenariot utlöses ett ChangeConflictException undantag när User1 försöker skicka ändringar, eftersom User2 under tiden har ändrat kolumnerna Assistent och Avdelning. I följande tabell visas situationen.

Tillstånd Ansvarig Assistent Avdelning
Ursprungligt databastillstånd vid frågor från User1 och User2. Alfreds Maria Sales
User1 förbereder sig för att skicka dessa ändringar. Alfred Marketing
User2 har redan skickat dessa ändringar. Mary Tjänst

User1 bestämmer sig för att lösa den här konflikten genom att skriva över databasvärden med de aktuella klientmedlemsvärdena.

När User1 löser konflikten med hjälp KeepCurrentValuesav blir resultatet i databasen som i följande tabell:

Tillstånd Ansvarig Assistent Avdelning
Nytt tillstånd efter konfliktlösning. Alfred

(från User1)
Maria

(original)
Marketing

(från User1)

Följande exempelkod visar hur du skriver över databasvärden med aktuella klientmedlemsvärden. (Ingen inspektion eller anpassad hantering av enskilda medlemskonflikter inträffar.)

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        //No database values are merged into current.
        occ.Resolve(RefreshMode.KeepCurrentValues);
    }
}
Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

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

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' No database values are merged into current.
        occ.Resolve(Data.Linq.RefreshMode.KeepCurrentValues)
    Next

End Try

Se även