如何刷新 DbContext [英] How to Refresh DbContext
本文介绍了如何刷新 DbContext的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想刷新我的 DbContext
的所有实体而不重新创建它,我尝试了以下方法,但没有一个是有意义的:
I want to refresh all entities of my DbContext
without recreating it, I tried the following and none of them make sense:
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();
但是太慢了.你能帮我选择正确的方式吗?
But it's too slow. Can you help me choosing the right way?
推荐答案
我刚刚发现 Enumerable
结果应该被评估,因为 Refresh
方法将它作为对象并且不评价它.
I just found that the Enumerable
result should be evaluated because the Refresh
method gets it as object and doesn't evaluate it.
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).ToList();
context.Refresh(RefreshMode.StoreWins, refreshableObjects);
我更喜欢以下内容:
var refreshableObjects = myDbContext.ChangeTracker.Entries().Select(c=>c.Entity).ToList();
context.Refresh(RefreshMode.StoreWins, refreshableObjects);
这篇关于如何刷新 DbContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文