15

如何更新数据存储中的所有脏实体,并将其更改的值重置为原始存储值?

ObjectContext.Refresh方法需要将要刷新的实体作为参数。

4

4 回答 4

16

以下通常有效:

Context.Refresh(RefreshMode.StoreWins, _
    Context.ObjectStateManager.GetObjectStateEntries())

它有时会导致 EntityRelations 出现问题。查看我的评论以获取更多详细信息。

于 2009-11-17T06:39:03.113 回答
11

您可以使用以下代码:

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);
}

我写了一篇关于如何 RefreshAll() 并以其他方式刷新上下文的帖子:

http://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/

于 2013-06-13T16:27:55.923 回答
0

如果要重置所有更改,可以将 设置ObjectContext为 null 并重新实例化它。

我相信这会达到你想要的。

善良,

于 2009-11-17T06:27:07.410 回答
0

我们使用这个:

return Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted
System.Data.EntityState.Modified).All(ose 
  => {
    if(ose.Entity != null)
      Context.Refresh(RefreshMode.StoreWins, ose.Entity);
      return true;
    });

其中“上下文”是要刷新的上下文。我们通过更改状态和实体进行过滤,以避免新的实体和关系。

于 2010-12-01T10:20:51.363 回答