2010-10-03 69 views
4

在實體框架4,什麼是延遲加載之間的區別,並使用Load()方法之間的區別?是什麼延遲加載和load()

編輯:我已經添加了兩個 '如果' 語句:

延遲加載:

var query = from c in context.Contacts select c; 
foreach (var contact in query) { 
    if (contact.ID == 5) 
     Console.WriteLine(contact.Addresses.City); 
} 

Load()方法:

context.ContextOptions.LazyLoadingEnabled = false; 

var query = from c in context.Contacts select c; 
foreach (var contact in query) { 
    if (contact.ID == 5) { 
     contact.Addresses.Load() 
     Console.WriteLine(contact.Addresses.City); 
    } 
} 

現在,有這兩個「如果'檢查,爲什麼我應該先發一個呢?

+0

不你的示例代碼回答這個問題? – spender 2010-10-03 14:39:39

回答

2

Lazy Loading意味着一旦需要的對象,從而不加載不必要的數據時纔會發生的負載。

如果禁用Lazy Loading你說,你會通過調用加載載荷自己。

http://en.wikipedia.org/wiki/Lazy_loading

Lazy Loading默認情況下禁用,所以,當你在第一線將其設置爲false它不會做任何事情。

當你調用Load,你會加載所有到該數據庫中的相關對象

+0

@Oskar Kjellin,我已經添加了兩個'if'語句,對於我原來的問題,Lazy Loading和Load()是否仍然不相等?或者我應該假設,延遲加載是隱含的,並且Load()是做同樣事情的明確方式。 – kofucii 2010-10-03 14:52:43

+0

@Kofucii你爲什麼要這樣做?一定很慢 – 2010-10-03 14:56:47

+0

@Oskar Kjellin,這不是「爲什麼」的問題。我只是想了解這兩個功能背後的原理。爲什麼我有這兩個模型,看起來做同樣的事情。 – kofucii 2010-10-03 15:00:32

0

這個職位上Working with Lazy Loading in EF 4 Code First也應該理解實體如何框架幫助(這不是在這種情況下,這使得它沒有它的工作需要)在啓用或不啓用延遲加載時都會起作用。這也表明,它是由EF4默認以及如何禁用它在每個實例或默認情況下爲應用程序的基礎上啓用。