【发布时间】:2013-08-11 08:03:46
【问题描述】:
我想刷新我的DbContext 的所有实体而不重新创建它,我尝试了以下方法,但它们都没有意义:
var context = ((IObjectContextAdapter)myDbContext).ObjectContext;
var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(
EntityState.Added
| EntityState.Deleted
| EntityState.Modified
| EntityState.Unchanged)
where entry.EntityKey != null
select entry.Entity);
context.Refresh(RefreshMode.StoreWins, refreshableObjects);
//.......................................................................
foreach (var entry in this.Orm.ChangeTracker.Entries())
{
entry.State = EntityState.Unchanged;
}
this.Orm.ChangeTracker.DetectChanges();
也是唯一一个刷新了我的DbContext:
foreach (var i in this.Orm.ChangeTracker.Entries())
i.Reload();
但是太慢了。您能帮我选择正确的方式吗?
【问题讨论】:
-
你尝试过 context.Refresh(RefreshMode, Entity) 并在调试器和 sql 监视器中查看它是否真的更新了?
-
@yonexbat:我手动更改了 sql 中的数据并调用了
context.Refresh(RefreshMode, Entity),但没有更新更改,并使用i.Reload();完成了相同的场景,所有更改都在我的DbContext中更新。
标签: c# entity-framework entity-framework-4 refresh dbcontext