EF ICollection Vs List Vs IEnumerable Vs IQueryable

前端 未结 2 982
故里飘歌
故里飘歌 2020-12-12 12:07

so, my EF model has relationships and according to what I have seen in examples, those relationships should be done with virtual properties of ICollection.

Example:<

相关标签:
2条回答
  • 2020-12-12 12:24

    Another difference in case of EF is that the IEnumerable is not executing the query to the DB untill you really enumerate the list. While the IList will execute the query and fetch the items in memory. I had a strange behaviour with caching. Chaching the IEnumarable didn't store the items but rather the unfetched enumeration, everytime i would call the cache and fetch the enumeration for some purpose, it would go to the DB and execute the query, so caching was useless. But a ToList() on the enumeration fetched the items and stored the items in the cache, so only 1 trip to the DB for this. Find more in this post: http://www.dailycode.info/BlogV2/post/entityframework-adding-ienumerable-to-cache

    0 讨论(0)
  • 2020-12-12 12:38

    IQueryable:

    • Query isn't executed until you really iterate over the items, maybe by doing a .ToList() or a foreach. Which means you still can add filters, like a Where().
    • Extends IEnumerable

    IEnumerable:

    • Forward-only list of items. You can't get at "item 4" without passing items 0-3.
    • Read-only list, you can't add to it or remove from it.
    • Still might use deferred execution (IQueryable is still an IEnumerable).

    IList:

    • Random access to the full list
    • Probably entirely in memory (no deferred execution, but who knows what the exact class does that implements this?)
    • Supports adding and removing
    • Extends IEnumerable and ICollection

    ICollection:

    • Is between IEnumerable and IList.
    • Extends IEnumerable

    What is "best" depends on your requirements. Usually though an IEnumerable is "good enough" if you only want to display items. At least always use the generic variant.

    0 讨论(0)
提交回复
热议问题