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议是,尝试使用“短暂的环境”,你会避免这种问题。
我写了一些关于这个问题的文章:
使用刷新方法:
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.
- NameValueCollection URL查询?
- 我如何使用global.asax中的Server.MapPath()?
- Func <string,string>和delegate有什么区别?
- .ps1不能被加载,因为脚本的执行在这个系统上被禁用了?
- ASP.Net MVCredirect到一个不同的视图
- Web部署任务失败。 (“Microsoft.Web.Deployment.DeploymentManager”的types初始值设定项引发exception。)
- BuildTasks.Csc任务不能从程序集中加载?
- 将使用LINQ to SQL帮助防止SQL注入
- 如何实现ASP.NET MVC的reCaptcha?