2012-05-19 46 views
2

我讀的書Programming Entity Framework: DbContext,我只是讀了三個數據加載類型的章節:實體框架數據加載策略比較

  • 延遲加載(默認)
  • 預先加載
  • 明確加載

現在我問自己哪種數據加載在哪種情況下更好。具體的比較會很好!我還沒有找到。

例如,我在客戶端模塊上使用默認的延遲加載。這與銷售代表模塊處理,並暗示這些相關表:

  • 衆議員
  • Reps_Zones
  • Reps_Prerequisites
  • 用戶
  • Reps_Languages

在模塊,我使用所有這些表來派遣約會(約150人約會到50人)一次代表),但速度很慢。使用不同的加載策略是否真的可以提高性能?

+0

是的懶惰加載不是最好的解決方案在這裏。基本上你在這裏有一個'N + 1'的問題。意味着每次訪問實體時都會運行一條select語句來加載該實體。想象一下在一堆物體中循環。那裏有很多疑問。更好地加載負載,或者我猜測使用查詢構建器或linq顯式加載你需要的東西。 – Gohn67

+0

在這裏看到關於在orm中延遲加載的N + 1問題http://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem – Gohn67

回答

2

延遲加載似乎最適合於沒有單獨數據層的較小應用程序。一旦應用程序增長並開始將其分離爲單獨的圖層,延遲加載變得不那麼有用。數據到達UI層後,DBcontext早已被銷燬,而當您處於數據層中時,指定加載的合適數據並不是什麼大事。

延遲加載已關閉以進行驗證,因此如果某個屬性被標記爲必需,並且您只加載了父項,則會始終引發錯誤,這非常令人沮喪。

延遲加載還會使調試相當棘手,因爲查詢在執行之前一直沒有執行,因此您無法輕鬆檢查查詢的結果。我通常添加一個ToList()或類似於我的EF查詢,以便我可以輕鬆檢查結果。