2009-07-21 10 views
2

J'ai une liste déroulante dans mon application WPF qui est databound à ma liste d'objets dans mon modèle Voir. Lorsque l'utilisateur modifie l'objet sélectionné puis sélectionne un autre élément avant de l'enregistrer, je dois effacer les modifications apportées.Comment effacer les changements dans LinqToSql?

Je pensais pouvoir utiliser dataContext.GetChangeSet(). Updates.Clear() mais pour une raison quelconque, la collection est en lecture seule.

J'ai également essayé d'utiliser dataContext.Refresh mais cela ne fonctionne pas car l'objet n'existe pas dans la base de données, je l'ai créé manuellement à partir d'un SP.

Aidez-nous s'il vous plaît. Merci.

Répondre

2

Votre meilleur pari est probablement de re-interroger dans un contexte de données séparé. Vous pouvez annuler un insert (de l'ensemble de modifications) en utilisant DeleteOnSubmit (et l'inverse), mais je préfère ne pas, moi-même.

+0

Vous dites donc de créer essentiellement une nouvelle datacontext et aller chercher la données à nouveau? Si c'est le cas, c'est très lent car ma collection contient beaucoup d'objets. J'espérais qu'il y aurait une copie de l'objet quelque part afin que tout changement puisse être annulé (comme une fonction d'annulation). – HAdes

+0

Il existe une ancienne version dans le tracker de changement; mais l'idée d'un contexte de données est que ce soit une unité de travail; pas une base de données. IMO, on dirait que vous chargez simplement trop de données pour commencer ... –

+0

oh ok donc il y a une ancienne version que je peux utiliser, où est-ce s'il vous plaît? Je comprends votre point de vue sur le chargement trop, mais je ne peux pas voir une alternative, merci. – HAdes

3

En plus d'utiliser l'approche de Marc à l'aide DeleteOnSubmit (ou DeleteAllOnSubmit) pour enlever les inserts, ce qui suit en fait annuler toutes les mises à jour aswell:

// clears any updates. 
ChangeSet changes = dataContext.GetChangeSet(); 
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changes.Updates); 
+0

+1 Fonctionne pour les mises à jour, mais pas pour les insertions. – Igor

+0

Mais je suppose qu'il n'est pas nécessaire d'effacer les insertions puisque vous pouvez mettre 'InsertOnSubmit()' dans un bloc if-else qui dépend du résultat de la boîte de dialogue. – Igor

Questions connexes