Procedura: risolvere i conflitti mantenendo valori di databaseHow to: Resolve Conflicts by Retaining Database Values

Per risolvere le differenze tra i valori del database previsti ed effettivi prima del tentativo di inviare di nuovo le modifiche, è possibile usare OverwriteCurrentValues per conservare i valori trovati nel database.To reconcile differences between expected and actual database values before you try to resubmit your changes, you can use OverwriteCurrentValues to retain the values found in the database. I valori correnti nel modello a oggetti vengono quindi sovrascritti.The current values in the object model are then overwritten. Per ulteriori informazioni, vedere la concorrenza ottimistica: Panoramica.For more information, see Optimistic Concurrency: Overview.

Nota

In tutti i casi, viene innanzitutto aggiornato il record sul client recuperando i dati aggiornati dal database.In all cases, the record on the client is first refreshed by retrieving the updated data from the database. Questa azione assicura che il successivo tentativo di aggiornamento non avrà esito negativo durante gli stessi controlli di concorrenza.This action makes sure that the next update try will not fail on the same concurrency checks.

EsempioExample

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.In this scenario, a ChangeConflictException exception is thrown when User1 tries to submit changes, because User2 has in the meantime changed the Assistant and Department columns. Nella tabella seguente è illustrata questa situazione.The following table shows the situation.

ManagerManager AssistantAssistant DepartmentDepartment
Stato del database originale quando viene eseguita una query da User1 e User2.Original database state when queried by User1 and User2. AlfredsAlfreds MariaMaria SalesSales
User1 si prepara a inviare queste modifiche.User1 prepares to submit these changes. AlfredAlfred MarketingMarketing
User2 ha già inviato queste modifiche.User2 has already submitted these changes. MaryMary ServizioService

User1 decide di risolvere questo conflitto sovrascrivendo i valori correnti nel modello a oggetti con i valori del database più recenti.User1 decides to resolve this conflict by having the newer database values overwrite the current values in the object model.

Quando User1 risolve il conflitto usando OverwriteCurrentValues, il risultato nel database sarà come nella tabella seguente:When User1 resolves the conflict by using OverwriteCurrentValues, the result in the database is as follows in the table:

ManagerManager AssistantAssistant DepartmentDepartment
Nuovo stato dopo la risoluzione dei conflitti.New state after conflict resolution. AlfredsAlfreds

(originale)(original)
MaryMary

(da User2)(from User2)
ServizioService

(da User2)(from User2)

Nel codice di esempio seguente viene illustrato come sovrascrivere i valori correnti nel modello a oggetti con i valori del database.The following example code shows how to overwrite current values in the object model with the database values. Non si verificano conflitti di ispezione o gestione personalizzata dei singoli membri.(No inspection or custom handling of individual member conflicts occurs.)

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

Vedere ancheSee Also

Procedura: gestire i conflitti di modificheHow to: Manage Change Conflicts