2012-08-25 70 views
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()或其他東西。這意味着在這一點上的所有內容都已經具體化,儘管它可能不會被使用並且只會影響性能。

任何人都有任何擴展此背景的經驗,正如我所描述的那樣?

回答

3

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

但是,您的DbContext需要在整個HttpRequest的長度內生存(假設它是一個網站)。


前段時間,我做了一個blog post,與此有點相關(我認爲)。