Asp.net
帶有實體框架 4 的 ASP.NET MVC2 - 儲存庫中的 AsEnumerable() 或 ToList()?
因此,我多次被建議在使用上述框架建構應用程序時禁用延遲載入,並且 ToList() 將強制執行我的儲存庫中的查詢。有人告訴我,如果我使用 AsEnumerable(),我會避免可能遇到的某些“陷阱”。
然而,在最近的一個問題上,我在程式碼範例中包含了一堆 ToList(),這讓許多人感到震驚,他們向我保證 IEnumerable 更好地返回。
我現在完全糊塗了,至少可以這麼說。
我應該在我的儲存庫中返回 IEnumerable,然後在我的視圖模型中將它們轉換為 List 嗎?我應該像以前一樣在我的儲存庫中直接使用 ToList() 嗎?我是否應該首先啟用延遲執行?
吉米聖誕…
編輯: 所以,既然我禁用了延遲載入,基於之前的建議,我是否應該重新啟用它,從我的儲存庫返回 IEnumerable / IQueryable,並在我的視圖模型中將集合轉換為列表(如果需要)?
下面的答案之一將 IEnumerable 與急切執行相關聯,而我的印像是只有 ToList() 會強制立即執行查詢。
呼叫
ToList(),在您的儲存庫中返回一個IEnumerable,如果:
- 您想控制提供給消費者的輸出集(即您不希望他們對其執行查詢),並且
- 你不介意急切的執行。
如果出現以下情況,請在您的儲存庫中返回
IQueryable或IEnumerable通過AsEnumerable():
- 您不介意您的消費者在輸出集上執行查詢,並且
- 你想要延遲執行。
另見
http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case