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