1

Est-il possible d'utiliser des requêtes linq précompilées avec des référentiels? Actuel J'ai mes dépôts mis en place commeUtilisation de requêtes linq précompilées avec le modèle de référentiel dans EF

public class CustomerRepository : EntityRepository 
{ 
    private readonly IContext _context; 
    public CustomerRepository(UnitOfWork uow) 
     { 
      _context = uow.context; 
     } 
} 

je serais en mesure de créer une requête précompilée de la manière suivante en utilisant mes MyEntities réelles de classe de contexte: ObjectContext, IContext.

static Func<ObjectContext, int, Customer> _custByID; 

public static Customer GetCustomer(int ID) 
{ 
    if (_custByID == null) 
    { 
    _custByID = CompiledQuery.Compile<MyEntities, int, Customer> 
    ((ctx, id) => ctx.Customers.Where(c => c.CustomerID == id).Single()); 
    } 
    return _custByID.Invoke(_context, ID); 
} 

Le problème est que les méthodes de compilation TArg0 prennent en compte un type dérivé de ObjectContext. Depuis tout mon but de l'utilisation de référentiels avec IContext était de cacher le code lié cadre d'entité en utilisant ce qui précède n'a pas de sens. Comment devrais-je utiliser les requêtes linq précompilées? Dois-je les déplacer dans une bibliothèque de classes distincte qui fait référence à mon modèle et à l'infrastructure de l'entité ou est-ce que ma compréhension des référentiels est incorrecte? J'utilise EF4 dans une application ASP.net.

Répondre

3

L'implémentation du référentiel doit avoir la connaissance de la technologie d'accès aux données. La responsabilité du référentiel est de parler à la source de données sous-jacente afin de satisfaire le contrat. Il serait inutile d'avoir un référentiel si vous ne pouvez pas effectuer de telles optimisations car le ObjectSet est déjà un référentiel. Créer une autre couche d'indirection entre référentiel et EF est une abstraction inutile.

+0

Fait sens. Je crois que ma principale préoccupation était le test. J'avais utilisé un faux contexte pour tester mes fonctions de dépôt. Je crois que je ne serai pas capable de tester mes fonctions de référentiel en utilisant des requêtes linq précompilées maintenant sans frapper la strore de données? – nighthawk457

+0

@ nighthawk457 Le code impliquant EF ne fait pas l'objet de tests unitaires mais de tests d'intégration. Voir [cette question] (http://stackoverflow.com/questions/5609508/asp-net-mvc3-and-entity-framework-code-first-architecture) – Eranga

Questions connexes