2011-11-17 1 views

Répondre

5

Je ne pense pas qu'il existe une méthode intégrée pour y parvenir, vous pouvez toutefois exposer une propriété dans votre DbContext dans lequel vous appliquez le filtrage, initialement ce sera en lecture seule mais je ne vois pas pourquoi vous ne devriez pas créer votre propre implémentation DbSet renvoyant à un autre DbSet (ProxyDbSet)

exemple Readonly:

class MyDbContext : DbContext 
{ 
    public IDbSet<User> Users { get; set; } 

    public IQueryable<User> Admins 
    { 
     get 
     { 
      return from user in users 
        where user.Role == "admin" 
        select user; 
     } 
    } 
} 
+0

Merci @Polity. Si je comprends bien, ceci se traduirait par EF renvoyant mon ensemble complet d'enregistrements et puis assignant l'ensemble filtré linq à, dans votre exemple, la propriété Admins IQoyerable. J'espérais ne pas le faire car l'ensemble serait assez grand. Cependant, d'après ce que je peux dire, c'est peut-être la meilleure solution. Merci beaucoup pour la réponse rapide! – RockyMountainHigh

+2

@RockyMountainHigh - Non, il ne sera pas réellement, Notez que DbSet implémente IQueryable ainsi que la méthode elle-même retournant IQueryable. Cela signifie que l'administrateur appelant ne renverra rien d'autre qu'une définition de requête. Dès que vous commencez à faire un foreach sur le résultat des Admins, une requête SQL sera générée incluant un filtre where sur le rôle des utilisateurs. Par conséquent, ceci est tout aussi efficace que le mappage conditionnel – Polity

+0

Parfait! Je vous remercie! Apprenez quelque chose de nouveau aujourd'hui? Vérifier! – RockyMountainHigh

Questions connexes