实体框架存储库模式最佳实践

时间:2013-01-16 16:45:36

标签: entity-framework repository-pattern

我已经看过很多EF存储库的例子,经常创建某种“通用”repo类,它暴露出Get,Update,Delete等方法。({3}更受欢迎的文章之一})。本文的通用仓库包含一个Get方法,可让您传入要包含的过滤器,排序和导航属性列表。该方法返回一个IEnumerable。但是,如果我想编写更复杂的查询呢?我考虑过向通用仓库添加一个方法,例如:

public IQueryable<TEntity> Get()
{
    return dbSet;
}

然后我的BLL可以通过添加它需要的任何LINQ方法来“扩展”这个方法,例如: -

var results = _repository.Get().Take(4); // or whatever

我的另一个想法是将通用repo更改为基类,并创建一系列repo类(例如每个表一个)。然后,我会向这些repos添加特定方法,以执行特定的Get ...功能,如上例所示。

每种方法的专业和概念是什么?通用Get是更容易实现的解决方案,但将IQueryables传递回BLL并在BLL中使用LINQ查询是否可以接受? 单独的repo类方法提供了更清晰的分离,但这实际上是它的预期目的(我读过它们是围绕EF上下文的轻量级包装器)?此外,每次我需要实现一个新方法时,我必须更新repo接口和代码。

0 个答案:

没有答案