我如何刷新的DbContext [英] How do I 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?
推荐答案
我刚刚发现可枚举
结果应进行评估,因为刷新
方法获取它作为对象并且不评价它。
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);
我preFER以下内容:
var refreshableObjects = myDbContext.ChangeTracker.Entries().Select(c=>c.Entity).ToList();
context.Refresh(RefreshMode.StoreWins, refreshableObjects);
这篇关于我如何刷新的DbContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文