La mejor manera de actualizar entidades en su contexto es disponer su contexto y crear uno nuevo.
Si realmente necesita actualizar alguna entidad y está utilizando el enfoque Code First con la clase DbContext, puede usar
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Para recargar las propiedades de navegación de la colección, puede usar
public static void ReloadNavigationProperty<TEntity, TElement>(
this DbContext context,
TEntity entity,
Expression<Func<TEntity, ICollection<TElement>>> navigationProperty)
where TEntity : class
where TElement : class
{
context.Entry(entity).Collection<TElement>(navigationProperty).Query();
}
Referencia:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Recargar
context.ReloadNavigationProperty(parent, p => p.Children);
si tieneclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
fuente
Si desea recargar entidades específicas, con el DbContextApi, RX_DID_RX ya le dio la respuesta.
Si desea recargar / actualizar todas las entidades que cargó:
Si está utilizando Entity Framework 4.1+ (EF5 o EF 6 probablemente), API DbContext:
Si está utilizando entityFramework 4 (API ObjectContext):
De todos modos, el mejor consejo es tratar de utilizar un "contexto de corta duración" y evitará este tipo de problemas.
Escribí un par de artículos sobre el tema:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
fuente
Utilice el método Refresh :
o, alternativamente, elimine su contexto actual y cree uno nuevo.
fuente
((IObjectContextAdapter)dbContext).ObjectContext
context.Reload () no funcionaba para mí en MVC 4, EF 5, así que hice esto.
y está funcionando bien.
fuente
EF 6
En mi escenario, Entity Framework no estaba recogiendo los datos recién actualizados. La razón podría ser que los datos se actualizaron fuera de su alcance. Actualizar los datos después de obtenerlos resolvió mi problema.
fuente
_context.Entry(entity).Reload();
?.Reload()
no está disponible en EF6. @CsabaTothNo se recomienda actualizar el contexto de la base de datos con Reload debido a pérdidas de rendimiento. Es suficientemente bueno y la mejor práctica inicializar una nueva instancia de dbcontext antes de ejecutar cada operación. También le proporciona un contexto actualizado para cada operación.
fuente
¡He hecho que me duela la cabeza por nada! La respuesta fue muy simple: simplemente volví a lo básico ...
agregue esta línea a continuación después de actualizar / eliminar: está volviendo a cargar su entidad, sin métodos de sistema sofisticados.
fuente