J'ai un DAL qui fait des appels à mon Entity Framework Model. Les appels renvoient des choses comme des objets IOrderedQueryable et IQueryable. Dois-je les convertir en quelque chose de plus universel dans mon DAL, comme List? Mais je suppose que si je n'ai pas besoin d'énumérer toute la collection, cela pourrait être du gaspillage ... Alors, quelle est la meilleure approche? Juste le DAL retourne le IQueryable <> et le convertit quand j'en ai besoin? Ou y a-t-il quelque chose d'autre de plus flexible? Merci d'avance.Meilleure façon de passer les collections d'entités Entity Framework de la couche DAL au niveau Business Layer?
Répondre
J'ai la même question, mais je ne suis pas sûr de la réponse parfaite. Je me sens comme si le DAL renvoyait le IQueryable <> est en fait le plus flexible, parce que vous pourriez facilement effectuer une autre requête LINQ en plus de cela à une autre couche dans le code (si nécessaire).
Une autre chose à considérer est que lorsque vous renvoyez un IQueryable, les résultats ne sont pas encore chargés en mémoire. Donc, ce qui est retourné est en fait la "requête" LINQ. Par conséquent, il s'agit d'un comportement légèrement différent de celui auquel les gens pourraient être habitués, c'est-à-dire quand quelque chose est renvoyé par le modèle, c'est en fait les résultats de la base de données.
Dans ma situation, nous retournons des listes (créées en appelant IQueryable <> .ToList()) à partir de notre liste d'adresses distantes. Si cette liste a besoin d'être filtrée, nous créerions une autre méthode DAL qui retournerait une liste filtrée à la place. Nous avons choisi cela parce que l'autre couche qui appelle le DAL n'a pas besoin de savoir que nous utilisons Entity Framework de cette façon (aucune dépendance introduite).