2011-10-22 19 views

risposta

13

Probabilmente si sta cercando uno DbContext, che non ha un metodo Refresh. È possibile utilizzare l'interfaccia IObjectContextAdapter per ottenere il sottostante ObjectContext e richiamare l'aggiornamento.

var objectContext = ((IObjectContextAdapter)context).ObjectContext; 
+0

Complimenti "alla deriva", hai salvato il giorno per me. Ci sono * MOLTE * risposte a questa domanda e il tuo è di gran lunga il migliore! È davvero troppo brutto che DbContext non supporti direttamente l'aggiornamento? Questo sembrerebbe essere un modello molto comune da volere nelle app multitier. Mi stavo avvicinando alla sola lettura dell'oggetto, e ho copiato ciò che è cambiato prima di vedere la tua risposta :-) – Joe

2

È inoltre possibile utilizzare la funzione Reload sul Proxy Oggetti ... Ecco un esempio per ricaricare tutti gli oggetti modificati:

  var modifiedEntries = context.ChangeTracker.Entries() 
       .Where(e => e.State == EntityState.Modified); 
      foreach (var modifiedEntry in modifiedEntries) { 
       modifiedEntry.Reload(); 
      } 
0

La risposta ha postato in questa discussione potrebbe aiutare anche: Refresh entity instance with DbContext

In sintesi però, si potrebbe provare a chiamare qualcosa di simile a quanto segue:

dbContext.Entry(someEntityObjectInstance).Reload(); 

Tuttavia, qualcun altro ha notato che questo non aggiorna le proprietà di navigazione, quindi se devi preoccuparti di aggiornare anche le proprietà di navigazione, devi ricaricare() anche tutte le proprietà di navigazione o dovrai staccare() o Aggiorna() dopo il casting in IObjectContextAdapter, o forse semplicemente ricreare il tuo DbContext.

Nel mio caso, io francamente deciso che era meglio solo per ricreare il contesto e re-find() l'entità:

dbContext = new Model.Entities(); 
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey); 

Non v'è probabilmente nessun risposta semplice/migliore qui.

Problemi correlati