2010-08-09 92 views
1

我發現這個問題How to cache data in a MVC application,我想知道能夠使用IQueryable數據的這種方法。ASP.NET MVC - 緩存IQueryable數據

Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers 
     Dim users = (From u In dc.Users 
        Select u) 
     Return users.AsQueryable 
    End Function 

我可以改變這

Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers 
     Dim users = Cache("users") 
     If users Is Nothing Then 
      users = (From u In dc.Users 
          Select u) 
      Cache("users") = users 
     End If 

     Return users.AsQueryable 
    End Function 
+0

這將工作。但是你不應該緩存IQueryable,因爲它們持有DataContext。首先將數據轉換爲列表。例如users = dc.Users.ToList(); – Jacob 2010-08-09 22:57:07

回答

1

你可以做到這一點,是的,但它不會收到預期的效果,因爲(假定dc是一個LINQ to SQL的數據上下文)一個IQueryable不一組數據,它是一個存儲的查詢,稍後將執行,您需要存儲一個IList或類似的數據,如果需要,您仍然可以將它作爲IQueryable返回,儘管這可能會讓其他人感到困惑。

在緩存之前使用ToList()。

+0

這正是我的想法。我想我的更好的選擇是在我的服務層中使用緩存而不是我的回購層(與別人告訴我的相反)。我在我的回購層中使用AsQueryable,然後從服務層調用我的回購。我會在那裏緩存。 感謝您的見解。 – 2010-08-09 22:59:29