15 votes

<ObjectContext.Refresh()>?

Comment mettre à jour TOUS les entités sales du magasin de données et réinitialiser leurs valeurs modifiées à la valeur d'origine du magasin?

La méthode ObjectContext.Refresh exige en tant que paramètre les entités à actualiser.

16voto

Shimmy Points 23393

Le code suivant fonctionne généralement :

Context.Refresh(RefreshMode.StoreWins, _
    Context.ObjectStateManager.GetObjectStateEntries())

Cela peut parfois poser des problèmes avec les EntityRelations. Consultez mon commentaire pour plus de détails.

11voto

Vous pouvez utiliser ce code:

public void RefreshAll()
{
     // Obtenir tous les objets dans le statemanager avec entityKey 
     // (context.Refresh lancera une exception sinon) 
     var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(
                                                 EntityState.Deleted 
                                               | EntityState.Modified 
                                               | EntityState.Unchanged)
                                      where entry.EntityKey != null
                                      select entry.Entity);

     context.Refresh(RefreshMode.StoreWins, refreshableObjects);
}

J'ai écrit un article sur la façon de RefreshAll() et de rafraîchir le contexte de quelques autres manières:

http://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/

0voto

Daniel Elliott Points 13253

Si vous voulez réinitialiser TOUTES les modifications, vous pouvez définir l'ObjectContext sur null et le réinstancier.

Je crois que cela accomplira ce que vous voulez.

Cordialement,

Dan

0voto

jeffkmeng Points 101

Nous utilisons ceci:

return Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted
System.Data.EntityState.Modified).All(ose 
  => {
    if(ose.Entity != null)
      Context.Refresh(RefreshMode.StoreWins, ose.Entity);
      return true;
    });

Où "Context" est le contexte à rafraîchir. Nous filtrons par état de changement et entités pour éviter les nouvelles entités et relations.

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