2010-08-09 4 views
1

J'ai trouvé cette question How to cache data in a MVC application et je m'interroge sur la possibilité d'utiliser cette méthode avec des données IQueryable.ASP.NET MVC - Mise en cache des données 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 

Puis-je changer cela

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

Cela fonctionnera. Mais vous ne devez pas mettre en cache IQueryable car ils conservent un DataContext. Convertissez vos données en une liste en premier. par exemple. users = dc.Users.ToList(); – Jacob

Répondre

1

Vous pouvez le faire oui, mais il ne sera pas l'effet escompté puisque (en supposant dc est un LINQ au contexte de données sql) IQueryable n'est pas une collection de données, c'est une requête stockée qui s'exécutera plus tard, vous aurez besoin de stocker un IList ou similaire, vous pouvez toujours le retourner comme un IQueryable si désiré, bien que cela puisse être déroutant pour les autres.

Utilisez ToList() avant de le mettre en cache.

+0

c'est exactement ce que je pensais. Je pense que ma meilleure option est d'utiliser la mise en cache dans ma couche de service au lieu de ma couche repo (contrairement à ce que quelqu'un d'autre m'a dit). J'utilise AsQueryable dans ma couche repo, puis j'appelle mon repo de ma couche de service. Je vais mettre en cache là-bas. Merci pour les idées. –

Questions connexes