2010-05-25 7 views
2

Je tente d'implémenter un modèle de référentiel avec mes objets poco générés automatiquement à partir de mon edmx..NET Entity Framework & POCO ... interrogation du problème de la table complète

Dans ma classe dépôt, j'ai:

IObjectSet<E> _objectSet; 
private IObjectSet<E> objectSet 
{ 
    get 
    { 
     if (_objectSet == null) 
     { 
      _objectSet = this._context.CreateObjectSet<E>(); 
     } 
     return _objectSet; 
    } 
} 

public IQueryable<E> GetQuery(Func<E, bool> where) 
{ 
    return objectSet.Where(where).AsQueryable<E>(); 
} 

public IList<E> SelectAll(Func<E, bool> where) 
{ 
    return GetQuery(where).ToList(); 
} 

où E est l'une de mes classes POCO. Quand je trace la base de données et exécuter ceci:

IList<Contact> c = contactRepository.SelectAll(r => r.emailAddress == "[email protected]"); 

Il apparaît dans la trace sql comme sélection pour tout dans ma table de contact. Où vais-je me tromper ici? Y a-t-il une meilleure façon de faire cela? Est-ce qu'un objet ne charge pas paresseux ... donc il a omis la clause where? Ce est l'article que je lis, qui dit utiliser ObjectSet de ... depuis avec POCO, je ne passe pas de EntityObject ont à en « E »

http://devtalk.dk/CommentView,guid,b5d9cad2-e155-423b-b66f-7ec287c5cb06.aspx

Répondre

4

Utilisation Expression<Func<E, bool>> au lieu de Func<E, bool>. Le premier dit au compilateur C# d'émettre un arbre d'expression (utilisé pour construire la requête SQL) au lieu du code réel, où le second est un délégué normal. Cela signifie que vous effectuez actuellement le filtrage avec Linq to Objects après l'appel de la base de données.

+0

travaillé, merci! –

Questions connexes