Contesto di Entity Framework Aggiorna?

Come posso aggiornare il mio contesto? Ho delle quadro basate su viste dal mio Database e quando ho fatto un aggiornamento su una tabella Entità che ha proprietà di navigazione per le viste, l’ quadro è aggiornata ma la vista non si aggiorna secondo i nuovi aggiornamenti … voglio solo riprovare da il Db i dati. Grazie!

Il modo migliore per aggiornare le entity framework nel tuo contesto è quello di disporre del tuo contesto e crearne uno nuovo.

Se è davvero necessario aggiornare qualche quadro e si sta utilizzando l’approccio Code First con la class DbContext, è ansible utilizzare

public static void ReloadEntity( this DbContext context, TEntity entity) where TEntity : class { context.Entry(entity).Reload(); } 

Per ricaricare le proprietà di navigazione della raccolta, puoi utilizzare

  public static void ReloadNavigationProperty( this DbContext context, TEntity entity, Expression>> navigationProperty) where TEntity : class where TElement : class { context.Entry(entity).Collection(navigationProperty).Query(); } 

Riferimento: https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Ricaricare

 yourContext.Entry(yourEntity).Reload(); 

Se vuoi ricaricare quadro specifiche, con DbContextApi, RX_DID_RX ti ha già dato la risposta.

Se si desidera ricaricare / aggiornare tutte le quadro caricate:

Se si utilizza Entity Framework 4.1+ (EF5 o EF 6 probabilmente), API DbContext:

 public void RefreshAll() { foreach (var entity in ctx.ChangeTracker.Entries()) { entity.Reload(); } } 

Se si utilizza entityFramework 4 (API ObjectContext):

 public void RefreshAll() { // Get all objects in statemanager with entityKey // (context.Refresh will throw an exception otherwise) 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); } 

Il miglior consiglio è comunque, prova ad usare un “contesto di breve durata” e eviterai questo tipo di problemi.

Ho scritto un paio di articoli sull’argomento:

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

Usa il metodo di aggiornamento :

 context.Refresh(RefreshMode.StoreWins, yourEntity); 

oppure in alternativa disponi il tuo contesto attuale e creane uno nuovo.

context.Reload () non funzionava per me in MVC 4, EF 5 quindi l’ho fatto.

 context.Entry(entity).State = EntityState.Detached; entity = context.Find(entity.ID); 

e funziona bene.

L’aggiornamento del contesto db con Ricarica non è consigliato in quanto a causa della perdita di prestazioni. È abbastanza buono e la procedura migliore per inizializzare una nuova istanza di dbcontext prima di ogni operazione eseguita. Fornisce inoltre un contesto aggiornato aggiornato per ogni operazione.

 using (YourContext ctx = new YourContext()) { //Your operations } 

Mi sono fatto male alla testa per niente! La risposta è stata molto semplice: sono tornato alle basi …

 some_Entities e2 = new some_Entities(); //your entity. 

aggiungi questa riga dopo aver aggiornato / eliminato: stai ricaricando la tua quadro, senza metodi di sistema fantasiosi.

 e2 = new some_Entities(); //reset.