2010-06-18 84 views
1

我想知道是否有可能從數據模型刷新所有實體作爲相反,以逐一刷新它們。如何強制刷新實體框架4.0中的所有實體

Something like entities.RefreshAll();

+0

爲什麼?這將是一項非常昂貴的操作 - 可能需要很長時間才能帶來好處。爲什麼不放棄ObjectContext並開始一個新的? – 2010-06-18 12:08:08

+0

@Craig 我們在WPF中使用PRISM,當我們解析數據模型時,它總是返回單例,每次只返回一個實例。 這對我們來說是件好事。 我們需要在同步後刷新所有的實體,通常不時。 如果我們可以使用「entities.RefreshAll();」 Regards, DanielSkowroński – 2010-06-21 14:43:21

+3

你不*想要使用單身OC。這會傷害你在內存使用和性能領域。 OC是一個工作單位。您應用中的工作單元不能是「應用的整個生命週期」。你需要重新考慮你的設計;它目前被破壞。 – 2010-06-21 14:56:13

回答

2

是的,你可以使用此代碼:

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.Added 
               | EntityState.Deleted 
               | EntityState.Modified 
               | EntityState.Unchanged) 
             where entry.EntityKey != null 
             select entry.Entity); 

    context.Refresh(RefreshMode.StoreWins, refreshableObjects); 
} 

我寫了另一對夫婦的提神方式與EF:

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

+0

感謝您發佈您的答案!請注意,您應該在此處發佈答案的重要部分,在此網站上,或者您的帖子風險被刪除[請參閱常見問題,其中提到的答案几乎不超過鏈接。](http:// stackoverflow。 com/faq#deletion)如果您願意,您可能仍然包含該鏈接,但僅作爲「參考」。答案應該獨立,不需要鏈接。 – Taryn 2013-06-13 14:57:14