2

我创建了一个通用的工作单元/存储库模式,它在大多数情况下都有效。

这是一个例子:

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()这意味着此时的一切都已实现,即使它可能不会被使用并且只会影响性能。

正如我所描述的那样,任何人都有扩展此上下文的经验吗?

4

1 回答 1

3

通过在您的 return 语句中省略IEnumerable<T>return而不是return 。IQueryable<T>.ToList()

但是,您的 DbContext 需要在 HttpRequest 的整个长度内存在(假设它是一个网站)。


前段时间,我发表了一篇博文,与此有些相关(我认为)。

于 2012-08-25T13:11:29.590 回答