2010-07-06 12 views
0

J'ai un contexte Linq-to-SQL avec des modifications dans un EntitySet. Je veux me débarrasser de tous les changements que j'ai faits depuis que j'ai appelé SubmitChanges(). J'utilise la méthode suivante pour revenir l'état du contexte:Rétablissement des modifications d'un EntitySet <T> dans Linq-to-SQL

public static void RevertChanges(this DataContext context) 
{ 
    var changeSet = context.GetChangeSet(); 
    var inserts = changeSet.Inserts.ToList(); 
    var deleteAndUpdate = changeSet.Deletes.Concat(changeSet.Updates).ToList(); 

    foreach (var inserted in inserts) 
    { 
     var table = context.GetTable(inserted.GetType()); 
     table.DeleteOnSubmit(inserted); 
    } 

    if (deleteAndUpdate.Count > 0) 
    { 
     context.Refresh(RefreshMode.OverwriteCurrentValues, deleteAndUpdate); 
    } 
} 

Cela fonctionne bien, sauf qu'un EntitySet basé sur la table ne reçoivent pas rafraîchi, et maintient les changements en elle.

Quelle est la meilleure façon de rejeter les modifications dans un EntitySet?

Répondre

3

La meilleure façon?

using (DataContext dc = new DataContext) 
{ 

} 

C'est la seule façon d'être sûr.

Une deuxième meilleure option consisterait à réécrire un EntitySet et à l'affecter à la propriété - de la même manière que dans le fichier designer.cs.

+0

Pouce. Ceci est difficile en raison de la façon dont le DataContext est utilisé. Je cherche un moyen d'éviter cela. – codekaizen

+0

Salut, merci pour la 2ème option - ça a l'air prometteur. Comment rafraîchir les entités dans l'EntitySet après que je l'ai recréé? – codekaizen

+0

Ok, je l'ai résolu en émettant une requery sur le contexte et en remplissant l'EntitySet manuellement. – codekaizen