实体框架 - 如何重用查询

时间:2012-08-25 13:05:24

标签: .net entity-framework

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

以下是一个例子:

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()或其他东西就不再可用。这意味着此时的所有内容都已实现,即使它可能未被使用并且只会影响性能。

根据我的描述,任何人都有扩展这种背景的经验吗?

1 个答案:

答案 0 :(得分:3)

在返回语句中省略IEnumerable<T>,而不是返回.ToList(),返回IQueryable<T>

但是你的DbContext需要在HttpRequest的整个过程中存活(假设它是一个网站)。


前段时间,我做了blog post,与此有些相关(我认为)。