[英]EF ICollection Vs List Vs IEnumerable Vs IQueryable
所以,我的EF模型有關系,根據我在例子中看到的,這些關系應該用ICollection的虛擬屬性來完成。
例:
public class Task
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<SubTask> { get; set; }
}
我在某處讀到了我應該使用IEnumerable來防止延遲執行,這是正確的嗎? 這意味着如果我的DAL方法返回IEnumerable,仍然是IQueryable,那么SQL將在那一刻執行,而不是在我在網頁中調用.TOList時。
那么,最佳做法是什么? 我該怎么回事? IEnumerable,List?,IList,ICollection?
謝謝
.ToList()
或foreach
。 這意味着您仍然可以添加過濾器,例如Where()
。 IList
:
什么是“最好”取決於您的要求。 通常,如果您只想顯示項目,IEnumerable“足夠好”。 至少總是使用通用變體。
EF的另一個區別是IEnumerable沒有執行查詢到DB,直到您真正枚舉列表。 IList將執行查詢並獲取內存中的項目。 我有一個奇怪的緩存行為。 追逐IEnumarable並沒有存儲項目,而是存儲了未獲取的枚舉,每當我調用緩存並為某種目的獲取枚舉時,它將轉到數據庫並執行查詢,因此緩存是無用的。 但是枚舉上的ToList()獲取了項目並將項目存儲在緩存中,因此只有1次訪問數據庫。 在這篇文章中找到更多: http : //www.dailycode.info/BlogV2/post/entityframework-adding-ienumerable-to-cache
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.