2009-08-20 112 views
1

我一直在思考如何最好地緩存IQueryables。我使用的是存儲庫模式將數據讀取到類像這樣:使用IQueryables緩存策略

public class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public IQueryable<Category> { get; set; } // For simplicity. It is actually a LazyList<Category> containing an IQueryable 
} 

現在我將如何最好的去緩存此對象嗎?我想保留延遲執行的查詢,因爲實際上除了類別之外還有很多可以鏈接到該項目的東西,並且我最好不要將它們取出來存儲在對象上,因爲對象可能變得太大,或者他們可能需要分開緩存。

我在想,Compiled Query可能會使這種可能性,我只是不太明白如何。有沒有人找到任何好的解決方案?這似乎是一個很常見的模式使用。

回答

1

使用已編譯的查詢,可以緩存Func<MyDataContext, IQueryable<Category>>類型的結果委託。每當你想要一個新的可查詢的時候,你只需創建一個新的數據上下文來傳遞給委託,並像正常一樣查詢產生的IQueryable<Category>