EF 4.0存储库模式IList <t>或IEnumerable <t> </t> </t>

时间:2010-08-19 14:24:45

标签: entity-framework-4

我确实在网上查看了EF Repository模式的常见实现。 然后我带来了这样的问题。例如,如果我有这样的方法:

    public IEnumerable<Entity> FindEntity(Expression<Func<Entity, bool> where) {...}

如果我有这样的情况,我需要IList而不是IEnumarable

我可以根据我的IEnumerable FindEntity实现创建IList

    IList<Entity> myList = new List<Entity>(FindEntity(x = x => x.Date == inputDate));

然后我可能在myList实例中具有IList接口(Count等等)的所有优点。

这种做法是不是很好,或者可能有更好的方法 IEnumerable到IList或作为一个选项我可能在Repository中有其他方法默认返回IList,例如

    public IList<Entity> FindEntity(Expression<Func<Entity, bool> where) {....} 

在这种情况下,我可能会删除IEnumerable FindEntity实现,因为我可能只是在需要时将IList转换为IEnumerable,或者我可以同时避免任何强制转换。

还有一个问题: 为什么常见的Repository实现实践只有IEnumerable而不是IList,应该有解释呢?或者只是个人偏好?

是的我明白IEnumerable比IList更轻,但无论如何有很多情况下我们需要IList而不是IEnumerable而且在这种方法中我们需要将IEnumerable转换为IList不是吗?

1 个答案:

答案 0 :(得分:0)

我认为这是一个选择。 IEnumerable是集合的最小公分母。您也可以预先编写linq语句。层中较高的ICollection或Ilist暴露了您可能不想允许的更多功能,例如向集合添加内容,删除类似的内容。