IL实体是否会对EF实体中的ICollection(或IEnumerable)产生任何性能影响?
答案 0 :(得分:2)
这实际上取决于您从数据库上下文中检索数据的方式。实体框架使用 DbSet ,以便将linq的抽象暴露给数据库表。此曝光以 IQueryable 的形式出现。 IQueryable实现IEnumerable接口,并允许枚举查询结果到数据库。
枚举强制执行与IQueryable对象关联的表达式树 -MSDN:http://msdn.microsoft.com/en-us/library/vstudio/bb351562(v=vs.100).aspx
因此,根据您是否只使用ToList()并抓取整个集合,使用.Take()或.Skip(),或者如果使用.Select()之类的投影 - 全部这些因素决定了从数据库获取数据时实体框架的性能。
您选择的内容代表您提取的数据的界面根本不会影响性能。这是因为接口只公开要使用的方法,但不会更改基础数据集。
基本上,这些方法的范围从IEnumerable的基础,一直到IList,它有更大的选择。通常,您可以将 IEnumerable 用于需要迭代和使用的一组数据, ICollection 用于一组数据,将被迭代和修改, IList 用于将要迭代,修改和排序的一组数据。