Лучший способ обновить сущности в вашем контексте - удалить ваш контекст и создать новый.
Если вам действительно нужно обновить какой-либо объект, и вы используете подход Code First с классом DbContext, вы можете использовать
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Чтобы перезагрузить свойства навигации коллекции, вы можете использовать
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();
}
Ссылка:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Перезагрузить
context.ReloadNavigationProperty(parent, p => p.Children);
если у тебя естьclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
источник
Если вы хотите перезагрузить определенные сущности с помощью DbContextApi, RX_DID_RX уже дал вам ответ.
Если вы хотите перезагрузить / обновить все загруженные вами объекты:
Если вы используете Entity Framework 4.1+ (возможно, EF5 или EF 6), API DbContext:
Если вы используете entityFramework 4 (ObjectContext API):
В любом случае лучший совет - постарайтесь использовать «кратковременный контекст», и вы избежите подобных проблем.
Я написал пару статей по этому поводу:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
источник
Используйте метод обновления :
или, в качестве альтернативы, избавьтесь от текущего контекста и создайте новый.
источник
((IObjectContextAdapter)dbContext).ObjectContext
context.Reload () не работал у меня в MVC 4, EF 5, поэтому я сделал это.
и он работает нормально.
источник
EF 6
В моем сценарии Entity Framework не собирала недавно обновленные данные. Причина может быть в том, что данные были обновлены за пределами его области. Обновление данных после получения разрешило мою проблему.
источник
_context.Entry(entity).Reload();
?.Reload()
в EF6 нет. @CsabaTothОбновление контекста базы данных с помощью Reload не рекомендуется из-за потери производительности. Достаточно хорошо и лучше всего инициализировать новый экземпляр dbcontext перед выполнением каждой операции. Он также предоставляет вам обновленный контекст для каждой операции.
источник
На самом деле я предлагаю удалить всю сущность и воссоздать ее в зависимости от вашего подхода.
источник
Я из-за ничего не разболел себе голову! Ответ был очень прост - я просто вернулся к основам ...
добавьте эту строку ниже после обновления / удаления - вы повторно загружаете свою сущность - нет причудливых системных методов.
источник