2009-06-09 7 views
0

Je suis probablement en train d'aborder l'un des plus grands problèmes de convivialité d'EF.Entity Framework: Faire de grandes requêtes

J'ai besoin d'effectuer un calcul sur une très grande partie d'un modèle. Par exemple, disons que nous avons besoin d'un bâtiment, avec toutes ses portes, les catégories de ces portes. Mais j'aurais aussi besoin des fenêtres, des meubles, du toit, etc.

Et imaginez que ma logique dépende aussi de tables plus couplées derrière ces catégories (sous-catégories etc.).

Nous avons besoin de la plupart de ce modèle à de nombreux points du code, donc je devrais avoir tout le modèle rempli et relié par EF.

Pour ce faire, nous interrogeons simplement ObjectContext et utilisons des inclusions sécurisées.

Mais cela devient in-pratique et sujet aux erreurs.

Quelqu'un a-t-il des suggestions pour s'attaquer à ce genre de problèmes? Utilisez la projection pour obtenir uniquement les valeurs dont vous avez besoin, surtout si vous n'avez pas l'intention de tout mettre à jour.

Répondre

3

Utilisez la projection pour obtenir uniquement les valeurs dont vous avez besoin. Vous ne avez probablement pas besoin de chaque propriété d'un meuble, etc. Donc, au lieu de récupérer l'entité elle-même, projet ce que vous voulez:

from b in Context.Buildings 
where b.Id == 123 
select new 
{ 
    Name = b.Name, 
    Rooms = from r in b.Rooms 
      select new 
      { 
       XDimension = r.XDimension, 
       // etc. 

Maintenant, vous n'avez plus à vous soucier de savoir si quelque chose est chargé; les choses dont vous avez besoin sont chargées, et les choses dont vous n'avez pas besoin ne l'est pas. Le SQL généré sera aussi beaucoup plus simple.

+0

merci pour la réponse. Je doute que cette approche soit pratique, mais ça vaut le coup d'essayer ... – Bertvan

+0

Je trouve cela beaucoup plus pratique que de payer le coût de la performance de chargement de choses dont vous n'avez pas besoin ou de devoir vous soucier de savoir si vous faites ce que vous voulez besoin est chargé. –