EF ICollection Vs List Vs IEnumerable Vs IQueryable
所以,我的ef模型有关系,根据我在示例中看到的,这些关系应该用iCollection的虚拟属性来完成。
例子:
1 2 3 4 5 6 | 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,列表?我是,我是,我是回忆?
谢谢
- 查询的执行,直到你真的是不是在iterate也许通过做项目,
foreach .ToList() 或。你还可以添加其均值滤波器,Where() 一样。 - 扩展IEnumerable
- 前一项目的列表。你能不能把"不合格项(4项"0 - 3。
- 只读列表,你不能添加或删除它从它。
- 使用延迟执行(iqueryable仍然可能仍然是一个IEnumerable)。
- 随机访问的完整列表
- 完全可能(在内存中的延期执行,但谁知道这类的实现),这样做的吗?)
- 支持添加和删除
- 扩展IEnumerable和ICollection
- ilist IEnumerable和IS之间。
- 扩展IEnumerable
什么是"最好的"取决于你的需求。虽然通常是一个IEnumerable的"足够好"如果你只想显示的项目。遗传变异在总最小二乘使用。
在另一个差分情况下,EF是IEnumerable不是自动执行查询的数据库,除非你真的枚举列表。而ilist将运行查询和读取内存中的项目。我有一个奇怪的行为与缓存。在ienumarable didn’t chaching店而unfetched列举的项目,我会在每一次调用的枚举和读取缓存的一些用途,它会去和运行数据库查询操作系统缓存,是无用的。但tolist(枚举)的项目的项目存储在读取和高速缓存系统中,仅在1 dB的去为这个。找到更多的在这个帖子:http://///blogv2 www.dailycode.info后加entityframework IEnumerable到缓存。