2011-10-22 13 views

Respuesta

13

Es probable que esté buscando en DbContext, que no tiene un método Refresh. Puede usar la interfaz IObjectContextAdapter para obtener el ObjectContext subyacente y llamar a Refresh sobre eso.

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

Kudos "a la deriva", me salvaste el día. Hay * MUCHAS * respuestas a esta pregunta, ¡y la tuya es de lejos la mejor! Es realmente malo que DbContext no sea compatible con la actualización directamente? Esto parece ser un patrón muy común de querer en aplicaciones de varios niveles. Estaba cerca de leer el objeto y copiar lo que había cambiado antes de ver tu respuesta :-) – Joe

2

También puede utilizar la función de recarga en el Proxy Objetos ... Este es un ejemplo para recargar todos los objetos modificados:

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

La respuesta participado en este tema podría ayudar también: Refresh entity instance with DbContext

En resumen, sin embargo, es posible que trate de llamar algo como lo siguiente:

dbContext.Entry(someEntityObjectInstance).Reload(); 

Sin embargo, alguien más notó que esto no actualiza las propiedades de navegación, por lo que si también tiene que preocuparse por refrescar las propiedades de navegación, también debe volver a cargar() todas las propiedades de navegación o deberá separarlas() o Refresh() después de convertir a IObjectContextAdapter, o tal vez solo recrear su DbContext.

En mi caso, yo francamente decidió que era mejor simplemente para recrear el contexto y volver a Buscar() la entidad:

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

No es, sin duda hay una simple mejor respuesta/aquí.

Cuestiones relacionadas