我创建了一个通用的工作单元/存储库模式,它在大多数情况下都有效。
以下是一个例子:
public IEnumerable<Deal> GetBySubcategory(int subcategoryId)
{
using (var uow = new ReadUow())
{
var r = new ReadRepo<Deal>(uow.Context);
var deals = r.FindBy(d => d.DealSubcategories.Any(s => s.SubcategoryId == subcategoryId))
.Include("DealSubcategories");
return deals.ToList();
}
}
为了将数据大小保持在最小,我尝试过滤每个主要查询。我的问题是,如何使上述更可重复使用?
上述方法有一个过滤器,但这可能是2,3或更多。如果可能的话,我不想为每个变体创建一个方法,但只要IEnumerable<T>
退出上下文,如果不调用ToList()
或其他东西就不再可用。这意味着此时的所有内容都已实现,即使它可能未被使用并且只会影响性能。
根据我的描述,任何人都有扩展这种背景的经验吗?
答案 0 :(得分:3)
在返回语句中省略IEnumerable<T>
,而不是返回.ToList()
,返回IQueryable<T>
。
但是你的DbContext需要在HttpRequest的整个过程中存活(假设它是一个网站)。
前段时间,我做了blog post,与此有些相关(我认为)。