La meilleure façon d'actualiser les entités dans votre contexte est de disposer votre contexte et d'en créer un nouveau.
Si vous avez vraiment besoin d'actualiser une entité et que vous utilisez l'approche Code First avec la classe DbContext, vous pouvez utiliser
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Pour recharger les propriétés de navigation de la collection, vous pouvez utiliser
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();
}
Référence:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Recharger
context.ReloadNavigationProperty(parent, p => p.Children);
si vous avezclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
la source
Si vous souhaitez recharger des entités spécifiques, avec le DbContextApi, RX_DID_RX vous a déjà donné la réponse.
Si vous souhaitez recharger / actualiser toutes les entités que vous avez chargées:
Si vous utilisez Entity Framework 4.1+ (EF5 ou EF 6 probablement), API DbContext:
Si vous utilisez entityFramework 4 (API ObjectContext):
Le meilleur conseil de toute façon est d'essayer d'utiliser un "contexte de courte durée" et vous éviterez ce genre de problèmes.
J'ai écrit quelques articles sur le sujet:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
la source
Utilisez la méthode Refresh :
ou en alternative, supprimez votre contexte actuel et créez-en un nouveau.
la source
((IObjectContextAdapter)dbContext).ObjectContext
context.Reload () ne fonctionnait pas pour moi dans MVC 4, EF 5, alors je l'ai fait.
et son fonctionnement très bien.
la source
EF 6
Dans mon scénario, Entity Framework ne récupérait pas les données nouvellement mises à jour. La raison pourrait être que les données ont été mises à jour en dehors de leur portée. L'actualisation des données après la récupération a résolu mon problème.
la source
_context.Entry(entity).Reload();
?.Reload()
n'est pas disponible dans EF6. @CsabaTothL'actualisation du contexte de base de données avec Recharger n'est pas recommandée en raison de la perte de performances. Il est suffisant et recommandé d'initialiser une nouvelle instance de dbcontext avant chaque opération exécutée. Il vous fournit également un contexte actualisé à jour pour chaque opération.
la source
En fait, je suggère de supprimer l'entité entière, et de la recréer en fonction de votre approche
la source
J'ai fait mal à ma tête pour rien! La réponse était très simple - je suis juste retourné à l'essentiel ...
ajoutez cette ligne ci-dessous après avoir mis à jour / supprimé - vous rechargez vos méthodes système d'entité sans fantaisie.
la source