我怎样才能刷新我的背景?我有基于我的数据库中的视图的实体,当我对一个表具有视图导航属性的实体进行更新时,实体是更新但视图不刷新符合新的更新...只是想再次从Db数据。 谢谢!
答案 0 :(得分:74)
在上下文中刷新实体的最佳方法是处置上下文并创建一个新上下文。
如果确实需要刷新某个实体并且您正在使用DbContext类的Code First方法,则可以使用
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();
}
答案 1 :(得分:54)
yourContext.Entry(yourEntity).Reload();
答案 2 :(得分:12)
答案 3 :(得分:5)
context.Reload()在MVC 4,EF 5中没有为我工作所以我这样做了。
context.Entry(entity).State = EntityState.Detached;
entity = context.Find(entity.ID);
并且工作正常。
答案 4 :(得分:0)
由于性能损失,建议不要使用重新加载刷新数据库上下文。在执行每个操作之前初始化dbcontext的新实例已经足够了并且是最佳实践。它还为您提供每个操作的刷新最新上下文。
using (YourContext ctx = new YourContext())
{
//Your operations
}
答案 5 :(得分:0)
在我的场景中,实体框架未获取新更新的数据。原因可能是数据已超出其范围。提取后刷新数据解决了我的问题。
private void RefreshData(DBEntity entity)
{
if (entity == null) return;
((IObjectContextAdapter)DbContext).ObjectContext.RefreshAsync(RefreshMode.StoreWins, entity);
}
private void RefreshData(List<DBEntity> entities)
{
if (entities == null || entities.Count == 0) return;
((IObjectContextAdapter)DbContext).ObjectContext.RefreshAsync(RefreshMode.StoreWins, entities);
}
答案 6 :(得分:-6)
我让自己的头脑无所畏惧!答案非常简单 - 我刚回到基础......
some_Entities e2 = new some_Entities(); //your entity.
在您更新/删除后添加以下行 - 您正在重新加载您的实体 - 没有花哨的系统方法。
e2 = new some_Entities(); //reset.