Procedura: risolvere i conflitti sovrascrivendo i valori di database

Per risolvere le differenze tra i valori del database previsti ed effettivi prima del tentativo di inviare di nuovo le modifiche, è possibile usare KeepCurrentValues per sovrascrivere i valori del database. Per altre informazioni, vedere Concorrenza ottimistica: Panoramica.

Nota

In tutti i casi, viene innanzitutto aggiornato il record sul client recuperando i dati aggiornati dal database. Questa azione assicura che il successivo tentativo di aggiornamento non avrà esito negativo durante gli stessi controlli di concorrenza.

Esempio

In questo scenario viene generata un'eccezione ChangeConflictException quando User1 tenta di inviare le modifiche, in quanto nel frattempo User2 ha modificato le colonne Assistant e Department. Nella tabella seguente è illustrata questa situazione.

Provincia Manager Assistente Department
Stato del database originale quando viene eseguita una query da User1 e User2. Alfreds Maria Vendite
User1 si prepara a inviare queste modifiche. Alfred Marketing
User2 ha già inviato queste modifiche. Mary Servizio

User1 decide di risolvere questo conflitto sovrascrivendo i valori del database con i valori del membro client corrente.

Quando User1 risolve il conflitto usando KeepCurrentValues, il risultato nel database sarà come nella tabella seguente:

Provincia Manager Assistente Department
Nuovo stato dopo la risoluzione dei conflitti. Alfred

(da User1)
Maria

(originale)
Marketing

(da User1)

Nel codice di esempio seguente viene illustrato come sovrascrivere i valori del database con i valori del membro client corrente. Non si verificano conflitti di ispezione o gestione personalizzata dei singoli membri.

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

Vedi anche