5
我正在使用實體框架一段時間,但仍然有一些「黑洞」與它如何在引擎蓋下工作。即使閱讀了幾篇文章後,我也不確定我的理解是否正確。瞭解引擎蓋下的EF。包括vs加入
讓我們開始提問:
- EF包括如何引擎蓋下工作?
- 加入和包含有什麼區別?
- 包含的性能問題(延遲加載vs預先加載,生成的SQL查詢等)?
- 當我應該使用Join而不是Include時,反之亦然?
我正在使用實體框架一段時間,但仍然有一些「黑洞」與它如何在引擎蓋下工作。即使閱讀了幾篇文章後,我也不確定我的理解是否正確。瞭解引擎蓋下的EF。包括vs加入
讓我們開始提問:
當通過linq或lambda表達式查詢EF時,如果底層架構不提供FK,並且因此您沒有對象的導航屬性,則只需要連接語句。
另一方面,包含(加載加載)和延遲加載只有在存在FK時纔會起作用,因爲它使用導航屬性。
兩種情況下的底層sql都將使用連接(因爲sql沒有「導航屬性」概念)。
至於性能,這取決於情況。延遲加載vs預先加載(所以在FK場景中)可能是一個困難的選擇。
我通常使用延遲加載,當你有一個很大的主結果時很有用,但是你只需要「加入」整個結果集的幾個項目的數據。
如果您事先知道需要整個結果集的連接數據,那麼熱切加載可能會更好地提高性能。我建議你去嘗試一下,看看你自己。
謝謝你的回答,但仍然需要更精確的東西。 – 2011-12-27 20:20:09