2013-03-27 61 views
0

是否有配置的DbContext熱切加載所有的實體的一種方式?我們嘗試:熱切加載所有實體的DbContext

 Configuration.LazyLoadingEnabled = false; 
     Configuration.ProxyCreationEnabled = false; 

我們既沒有ProxyCreationEnabled被關閉嘗試。

我只是碰巧知道我們加載在DB不是很大,不經常變化,並引用了很多。所以把它全部留在記憶中將是非常有利的。

回答

1

沒有,LazyLoadingEnabled殘疾並不意味着「EagerLoadingEnabled」。它是:「連加載啓用,僅載入明確你的要求。」一個EF上下文永遠不會自動進行急切的加載。想想實體和大型數據庫之間的許多關聯會發生什麼。

你不會有太大的預加載的一切到你的背景下,除非你使用的方法只能訪問本地實體受益。您可以通過DbSet.LocalDbSet.Find訪問本地實體。

只需訪問一個DbSet(如context.Customers)將執行一個數據庫查詢反正。如果延遲加載禁用它可以用來導航屬性當地實體(稱爲關係修正),但以其他方式使用的導航性能也將導致數據庫查詢。

這聽起來像你應該填充從你的數據庫中的對象圖,使用上下文,並將它緩存範圍之外。請注意,如果您只讀取數據,則可能需要使用AsNoTracking擴展方法。 (如context.Customers.AsNoTracking())。

0

都能跟得上......但如果你正在尋找最高效的方式來加載大量數據到EF的DbContext,我建議寫一個存儲過程返回多個結果集(每個實體類型)。當實體加載到上下文中時,EF將自動掛接導航屬性。

下面是關於如何從數據庫第一和代碼第一視角去做指令:

http://msdn.microsoft.com/en-us/data/jj691402.aspx