這3種加載類型有什麼區別?有人可以用一個例子來解釋嗎?網上不同的資源使用不同的定義,導致比必要的混亂更多。延遲加載,延期加載和實體加載實體框架
6
A
回答
7
延遲加載和延遲是非常同義的(AFAIK,請糾正我,如果我錯了)。 Eager和Lazy之間最大的區別在於。急於將前面發生的「按需」和執行將在DB發生LEVEL-讓我們來簡單,懶只會發生JOIN語句作爲一個例子
var people = (from p in people SELECT p).ToList();
var jobs = (from j in jobs SELECT j).ToList();
var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()
這是預先加載的一個例子。我們得到了所有的人,所有的工作,我們正在加入記憶。不是很聰明(通常)。這是它看起來像懶惰式的。
var people = (from p in people SELECT p);
var jobs = (from j in jobs SELECT j);
var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()
這是什麼做的是對人類和創造就業機會爲IQueryable(IQueryable的是懶惰),和連接是發生在DB。這節省了網絡活動,而且通常實際上更快,因爲數據庫已經過優化以進行連接等。
除非我們明確地說「我需要這些數據!」 (通過ToListing,遍歷它等等)它很懶。還有一些怪癖,但這應該是一個體面的底漆。
3
懶惰/延期加載:延遲加載和延遲加載是同一件事。該關係在第一次被訪問時被加載。這個想法是,如果數據不是必需的,它不應該被加載。
渴望加載:關係與Parent對象一起被提取。這可以在加載數據時更高效,但會加載數據,而不管數據是否被使用/未使用。
0
當查詢返回對象時,相關對象不會同時加載。
而是在導航屬性被訪問時自動加載。也稱爲「延遲加載」,
相關問題
- 1. 實體框架,SQLite和延遲加載
- 2. 實體框架延遲加載和ICollection
- 3. 實體框架 - 延遲加載,加載子實體問題
- 4. 實體框架延遲加載
- 5. 延遲加載框架實體問題
- 6. 實體框架延遲加載問題
- 7. 對實體延遲加載
- 8. 實體框架5:使用延遲加載或熱切加載
- 9. 實體框架 - 停止延遲加載相關實體按需?
- 10. 實體框架4延遲加載實體集
- 11. 實體框架不延遲加載FK集合添加
- 12. 實體框架延遲加載和DTO模式
- 13. 實體框架5的延遲加載和提琴手
- 14. 實體框架和構造函數注入延遲加載
- 15. 實體框架和延遲加載的問題
- 16. 實體框架和延遲加載的ICollection執行
- 17. 實體框架級聯刪除和延遲加載
- 18. 實體框架中的異步查詢和延遲加載
- 19. 實體框架延遲加載失敗,只是添加實體的屬性
- 20. LINQ到實體延遲加載
- 21. 延遲加載的POCO實體,實體框架和WCF如何一起工作?
- 22. 通過實體框架中的屬性加載相關集合(延遲加載)
- 23. 實體框架延遲加載只加載集合中的一個項目
- 24. C#實體框架延遲加載,如果沒有分離
- 25. 實體框架代碼保存後首先不延遲加載
- 26. 實體框架中的延遲加載項目
- 27. 實體框架延遲加載的集合有時空
- 28. 實體框架代碼優先軟刪除延遲加載
- 29. 在SaveChanges實體框架後延遲加載不工作
- 30. 禁用延遲加載的實體框架導航屬性
注意 - 語法可能不是100%,只是脫離袖口。 – 2010-07-12 17:14:22
根據你的例子,一旦做了一個ToList,它就會急切地加載,因爲它會觸發數據庫來獲取數據。所以,它似乎更像是一種編程風格。但是,對於EF,可以在「上下文選項」中將LazyLoading設置爲true或false。這怎麼適合? – DotnetDude 2010-07-12 18:31:18
帶有LazyLoading關閉的EF4將要求您說People.Include(「Jobs」)以帶回作業記錄(假設作業是FK'd給People)。使用LazyLoading時,該數據將在需要時返回。 I.E.當你說People.Jobs.ToList(); – 2010-07-12 18:50:12