use*_*557 88 c# asp.net entity-framework
我怎样才能刷新我的背景?我有基于我的数据库中的视图的实体,当我对一个表具有视图导航属性的实体进行更新时,实体是更新但视图不刷新符合新的更新...只是想再次从Db数据.谢谢!
RX_*_*_RX 82
刷新上下文中实体的最佳方法是处置上下文并创建一个新上下文.
如果你真的需要刷新一些实体而你正在使用Code First方法和DbContext类,你可以使用
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Run Code Online (Sandbox Code Playgroud)
要重新加载集合导航属性,您可以使用
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();
}
Run Code Online (Sandbox Code Playgroud)
参考:https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx# M: System.Data.Entity.Infrastructure.DbEntityEntry .Reload
kra*_*s88 61
yourContext.Entry(yourEntity).Reload();
Run Code Online (Sandbox Code Playgroud)
Chr*_*uez 26
如果您想使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是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);
}
Run Code Online (Sandbox Code Playgroud)
无论如何最好的建议是,尝试使用"短暂的背景",你将避免这种问题.
我写了几篇关于此事的文章:
Alb*_*rto 15
使用Refresh方法:
context.Refresh(RefreshMode.StoreWins, yourEntity);
Run Code Online (Sandbox Code Playgroud)
或者替代地处理您当前的上下文并创建一个新的上下文.
小智 6
context.Reload()在MVC 4,EF 5中没有为我工作所以我这样做了.
context.Entry(entity).State = EntityState.Detached;
entity = context.Find(entity.ID);
Run Code Online (Sandbox Code Playgroud)
它的工作正常.
| 归档时间: |
|
| 查看次数: |
140222 次 |
| 最近记录: |