所以,我的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()
。什么是“最好”取决于您的要求。通常,如果您只想显示项目,IEnumerable“足够好”。至少总是使用通用变体。
EF的另一个区别是IEnumerable没有执行查询到DB,直到您真正枚举列表。 IList将执行查询并获取内存中的项目。我有一个奇怪的缓存行为。追逐IEnumarable并没有存储项目,而是存储了未获取的枚举,每当我调用缓存并为某种目的获取枚举时,它将转到数据库并执行查询,因此缓存是无用的。但是枚举上的ToList()获取了项目并将项目存储在缓存中,因此只有1次访问数据库。在这篇文章中找到更多:http://www.dailycode.info/BlogV2/post/entityframework-adding-ienumerable-to-cache