A melhor maneira de atualizar entidades em seu contexto é descartar seu contexto e criar um novo.
Se você realmente precisa atualizar alguma entidade e está usando a abordagem Code First com a classe DbContext, você pode usar
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Para recarregar as propriedades de navegação da coleção, você pode 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();
}
Referência:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Recarregar
context.ReloadNavigationProperty(parent, p => p.Children);
se tiverclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
fonte
Se você deseja recarregar entidades específicas, com o DbContextApi, RX_DID_RX já deu a resposta.
Se você deseja recarregar / atualizar todas as entidades carregadas:
Se você estiver usando o Entity Framework 4.1+ (EF5 ou EF 6 provavelmente), API DbContext:
Se você estiver usando entityFramework 4 (ObjectContext API):
De qualquer maneira, o melhor conselho é tentar usar um "contexto de vida curta" e você evitará esse tipo de problema.
Escrevi alguns artigos sobre o assunto:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
fonte
Use o método Refresh :
ou, em alternativa, descarte seu contexto atual e crie um novo.
fonte
((IObjectContextAdapter)dbContext).ObjectContext
context.Reload () não estava funcionando para mim no MVC 4, EF 5, então fiz isso.
e está funcionando bem.
fonte
EF 6
Em meu cenário, o Entity Framework não estava pegando os dados recém-atualizados. O motivo pode ser os dados foram atualizados fora de seu escopo. Atualizar os dados após a busca resolveu meu problema.
fonte
_context.Entry(entity).Reload();
?.Reload()
não está disponível no EF6. @CsabaTothAtualizar o contexto do banco de dados com Reload não é a maneira recomendada devido à perda de desempenho. É bom o suficiente e a melhor prática inicializar uma nova instância do dbcontext antes de cada operação executada. Ele também fornece um contexto atualizado e atualizado para cada operação.
fonte
Eu fiz minha própria cabeça doer por nada! A resposta foi muito simples - acabei de voltar ao básico ...
adicione esta linha abaixo depois de atualizar / excluir - você está recarregando sua entidade - sem métodos de sistema sofisticados.
fonte