2010-08-09 91 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