是否有配置的DbContext熱切加載所有的實體的一種方式?我們嘗試:熱切加載所有實體的DbContext
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
我們既沒有ProxyCreationEnabled被關閉嘗試。
我只是碰巧知道我們加載在DB不是很大,不經常變化,並引用了很多。所以把它全部留在記憶中將是非常有利的。
是否有配置的DbContext熱切加載所有的實體的一種方式?我們嘗試:熱切加載所有實體的DbContext
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
我們既沒有ProxyCreationEnabled被關閉嘗試。
我只是碰巧知道我們加載在DB不是很大,不經常變化,並引用了很多。所以把它全部留在記憶中將是非常有利的。
沒有,LazyLoadingEnabled
殘疾並不意味着「EagerLoadingEnabled」。它是:「連懶加載啓用,僅載入明確你的要求。」一個EF上下文永遠不會自動進行急切的加載。想想實體和大型數據庫之間的許多關聯會發生什麼。
你不會有太大的預加載的一切到你的背景下,除非你使用的方法只能訪問本地實體受益。您可以通過DbSet.Local
或DbSet.Find
訪問本地實體。
只需訪問一個DbSet
(如context.Customers
)將執行一個數據庫查詢反正。如果延遲加載禁用它可以用來導航屬性當地實體(稱爲關係修正),但以其他方式使用的導航性能也將導致數據庫查詢。
這聽起來像你應該填充從你的數據庫中的對象圖,使用上下文,並將它緩存範圍之外。請注意,如果您只讀取數據,則可能需要使用AsNoTracking
擴展方法。 (如context.Customers.AsNoTracking()
)。
都能跟得上......但如果你正在尋找最高效的方式來加載大量數據到EF的DbContext,我建議寫一個存儲過程返回多個結果集(每個實體類型)。當實體加載到上下文中時,EF將自動掛接導航屬性。
下面是關於如何從數據庫第一和代碼第一視角去做指令: