44 votes

Comment puis-je refuser toutes les modifications dans un Linq to SQL DataContext?

Sur Linq to SQL DataContext je suis en mesure d'appeler SubmitChanges() de soumettre toutes les modifications.

Ce que je veux, c'est en quelque sorte refuser toutes les modifications dans le datacontext et la restauration de tous les changements (de préférence sans passer par la base de données).

Est-ce possible?

31voto

Haacked Points 31070

Pourquoi ne pas jeter le contexte de données et il suffit de le remplacer par une nouvelle instance?

10voto

Alexander Zwitbaum Points 1627

Dans .net 3.0 utilisation de l' db.GetChangeSet().Updates.Clear() pour les mises à jour, db.GetChangeSet().Inserts.Clear() pour les nouveaux ou db.GetChangeSet().Deletes.Clear() pour les éléments supprimés.

Dans .net 3.5 et au-dessus du résultat de GetChangeSet() est maintenant en lecture seule, la boucle de la collection pour ou foreach et actualiser chaque ensemble de modifications de la table comme aussi macias a écrit dans son commentaire.

9voto

Graeme Hill Points 304

L'appel de Clear() sur les Mises à jour, Suppressions et Insertions collection ne fonctionne pas.

GetOriginalEntityState() peut être utile, mais il ne donne que les Id des relations de clé étrangère, et non les entités de sorte que vous êtes de gauche avec un décollement de l'objet.

Voici un article qui explique comment ignorer les modifications du contexte de données: http://graemehill.ca/discard-changes-in-linq-to-sql-datacontext

EDIT: Appel Refresh() permet d'annuler les mises à jour, mais pas les suppressions et insertions.

9voto

Richard Poole Points 2410

Comme Haacked dit, il suffit de déposer le contexte de données.

Vous ne devriez probablement pas conserver les données de contexte en vie pendant une longue période de temps. Ils sont conçus pour être utilisés de manière transactionnelle (c'est à dire un contexte de données atomique par unité de travail). Si vous gardez un contexte de données en vie pendant une longue période, vous courez un plus grand risque de générer une simultanéité d'exception lorsque vous mettez à jour un état de l'entité.

4voto

David Basarab Points 25852

L'Actualisation va fonctionner, cependant, vous devez donner les entités que vous souhaitez réinitialiser.

Par exemple

dataContext.Refresh(RefreshMode.OverwriteCurrentValues, someObject);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X