如何刷新DbContext?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (217)

我想刷新我的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();
context.Refresh:
foreach (var i in this.Orm.ChangeTracker.Entries())
    i.Reload();
提问于
用户回答回答于

我刚发现Enumerable结果应该评估,因为Refresh方法将其作为对象,而不对其进行计算。

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);
用户回答回答于

我查过了,结果正常:

//Search
Box box = dbContext.Boxes.FirstOrDefault(x => x.BoxId == 45);

//breakpoint here, change Name of Box by sql management studio

//Refresh
var context = ((IObjectContextAdapter)dbContext).ObjectContext;
context.Refresh(System.Data.Entity.Core.Objects.RefreshMode.StoreWins, box);

//Check refresh and if it is in context
box = dbContext.Boxes.FirstOrDefault(x => x.BoxId == 45);

你确定它是同一个数据库上下文吗?

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问6 回答
  • 富有想象力的人

    4 粉丝0 提问6 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • 发条丶魔灵1

    6 粉丝525 提问4 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励