【问题标题】:ASP.NET MVC - Caching IQueryable DataASP.NET MVC - 缓存 IQueryable 数据
【发布时间】:2011-03-27 13:31:49
【问题描述】:

我发现了这个问题How to cache data in a MVC application,我想知道能否将这种方法用于 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

【问题讨论】:

  • 那行得通。但是您不应该缓存 IQueryable,因为它们会保留 DataContext。首先将您的数据转换为列表。例如用户 = dc.Users.ToList();

标签: asp.net-mvc-2 caching asqueryable


【解决方案1】:

你可以这样做,但它不会产生预期的效果,因为(假设 dc 是 linq to sql 数据上下文)IQueryable 不是数据集合,它是一个存储的查询,稍后将执行,你将需要存储 IList 或类似内容,如果需要,您仍然可以将其作为 IQueryable 返回,尽管这可能会让其他人感到困惑。

在缓存之前使用 ToList()。

【讨论】:

  • 这正是我的想法。我在想我更好的选择是在我的服务层而不是我的回购层中使用缓存(与其他人告诉我的相反)。我在我的 repo 层中使用 AsQueryable,然后我从我的服务层调用我的 repo。我会在那里缓存。感谢您的见解。
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多