Comment interroger par la clause where avec EF premier code
class User {
public int Id {set;get;}
public int ExternalId {set;get;}
}
J'ai cette classe définie. Je suis en utilisant le premier code EF.
public class FooContext : DbContext {
public DbSet<User> Users { set; get; }
}
Donc quand je fais les suivantes:
db.Users.ToList().where(x=>x.ExternalId == externalId);
Je suis curieux de savoir si ce n'est la suivante:
select whatever from Users where ExternalId = 'id I passed in';
ou il charge tous les utilisateurs à la mémoire et à faire du Linq dans la mémoire?
Quelle est la meilleure pratique pour interroger une table avec une condition (clause where)?
OriginalL'auteur DarthVader | 2012-07-13
Vous devez vous connecter pour publier un commentaire.
La ToList() qui va provoquer EF pour tirer tous les enregistrements d'utilisateurs en arrière de la DB. Votre appel à l'extension de la méthode sera exécutée sur l'ensemble de la mémoire. Si vous modifiez l'ordre de vos appels, il suffira de sélectionner les enregistrements à partir de la db, comme ceci:
C'est parce que Entity Framework utilise des retards dans l'exécution. L'appel à la base de données ne se produit pas jusqu'à ce que les documents sont énumérés dans votre code appelant. Jusqu'à ce que vous utilisez les résultats, la requête est une expression de l'arbre en attente d'être exécuté. Si vous regardez la méthode where() c'est le type de retour est IQueryable. Lorsque vous appelez ToList (), vous êtes essentiellement de la conversion à partir d'une expression de l'arbre (IQueryable) à une liste générique des utilisateurs. Cela nécessite EF pour exécuter le db requête pour renvoyer les résultats.
OriginalL'auteur Joe Barone