entity framework刷新上下文?

我怎么能刷新我的背景? 我有基于从我的数据库视图的实体,当我更新了一个具有导航属性视图的表实体,实体更新,但视图不刷新符合新的更新…只是想重新从Db的数据。 谢谢!

在您的上下文中刷新实体的最好方法是处理您的上下文并创build一个新的上下文。

如果您确实需要刷新某个实体,并且您正在使用DbContext类的Code First方法,则可以使用

public static void ReloadEntity<TEntity>( this DbContext context, TEntity entity) where TEntity : class { context.Entry(entity).Reload(); } 

要重新加载collections导航属性,可以使用

  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 .Reload

 yourContext.Entry(yourEntity).Reload(); 

如果你想用DbContextApi重载特定的实体,RX_DID_RX已经给你答案。

如果你想重新加载/刷新你加载的所有实体:

如果您使用Entity Framework 4.1+(EF5或EF 6可能),DbContext API:

 public void RefreshAll() { foreach (var entity in ctx.ChangeTracker.Entries()) { entity.Reload(); } } 

如果您使用的是entityFramework 4(ObjectContext API):

 public void RefreshAll() { // Get all objects in statemanager with entityKey // (context.Refresh will throw an exception otherwise) var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted | EntityState.Modified | EntityState.Unchanged) where entry.EntityKey != null select entry.Entity); context.Refresh(RefreshMode.StoreWins, refreshableObjects); } 

无论如何,最好的build议是,尝试使用“短暂的环境”,你会避免这种问题。

我写了一些关于这个问题的文章:

https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/

使用刷新方法:

 context.Refresh(RefreshMode.StoreWins, yourEntity); 

或者替代处理您当前的环境并创build一个新环境。

context.Reload()在MVC 4,EF 5中不适合我,所以我做了这个。

 context.Entry(entity).State = EntityState.Detached; entity = context.Find(entity.ID); 

它的工作正常。

刷新数据库上下文重新加载不build议由于性能损失的方式。 在执行每个操作之前,初始化dbcontext的新实例已经足够好了。 它还为您提供每次操作刷新的最新上下文。

 using (YourContext ctx = new YourContext()) { //Your operations } 

我已经让自己的头痛了一无所有! 答案非常简单 – 我刚回到基础知识…

 some_Entities e2 = new some_Entities(); //your entity. 

更新/删除之后,在下面添加这一行 – 您正在重新加载您的实体 – 没有花哨的系统方法。

 e2 = new some_Entities(); //reset.