Partager via


Procédure : Résoudre des conflits en remplaçant des valeurs de bases de données

Pour harmoniser des différences entre des valeurs de base de données attendues et réelles avant d'essayer de renvoyer vos modifications, vous pouvez utiliser KeepCurrentValues pour remplacer les valeurs de la base de données. Pour plus d’informations, consultez Accès concurrentiel optimiste : Vue d’ensemble.

Notes

Dans tous les cas, l'enregistrement sur le client est actualisé lors de la récupération des données mises à jour de la base de données. Cette action permet de s'assurer que la prochaine tentative de mise à jour n'échouera pas sur les mêmes vérifications d'accès concurrentiel.

Exemple

Dans ce scénario, une exception ChangeConflictException est levée lorsque User1 tente de soumettre des modifications, car User2 a modifié entre-temps les colonnes Assistant et Department. Le tableau suivant présente la situation.

État Manager Assistant department
État de la base de données d'origine lors d'une interrogation par User1 et User2. Alfreds Maria Sales
User1 s'apprête à soumettre ces modifications. Alfred Marketing
User2 a déjà soumis ces modifications. Mary Service

User1 décide de résoudre ce conflit en remplaçant des valeurs de base de données par les valeurs de membre client actuelles.

Lorsque User1 résout le conflit à l'aide de KeepCurrentValues, le résultat dans la base de données se présente comme dans le tableau suivant :

État Manager Assistant department
Nouvel état après résolution du conflit. Alfred

(de User1)
Maria

(d'origine)
Marketing

(de User1)

L'exemple suivant montre comment remplacer des valeurs de base de données par des valeurs de membre client actuelles. Aucune inspection ni aucune gestion personnalisée des conflits de membres individuels n'est effectuée.

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

Voir aussi