2017-10-06 1 views
0

J'ai un problème de performances avec l'API. Il est dû à la récupération de données à partir de plusieurs tables comme ci-dessousProblème de performance dû à l'inclusion d'une instruction dans Entity Framework

Exemple:

Users.Include(x => x.UsersAdditionInfo) 
    .Include(x => x.UserRoles) 
    .Include(x => x.Location) 

Note: chacune de ces tables contient près de (1,50,000) enregistrements sauf table emplacement.

J'ai utilisé des jointures au lieu de .Include puis j'ai également fait face aux mêmes problèmes de performances.

Exemple:

from ub in users 
join ua in UserAdditionalInfo on ub.Id equals ua.UserId 
join ur in UserRoles on ub.Id equals ur.UserId 
join urs in userRoles on ur.RoleId equals urs.Id 
join l in Location on ub.LocationId equals l.Id 
into leftLocation 
from location in leftLocation.DefaultIfEmpty() 

suggèrent Veuillez pour de meilleures façons alternatives de requêtes dans plusieurs tables

+0

si le calcul de la requête n'est pas un problème (ce que je suppose ne l'est pas, bien qu'un nombre élevé d'inclusions puisse rendre le calcul de la requête assez lourd), alors vous devriez essayer de diminuer le nombre d'enregistrements retournés/nombre de requêtes effectivement exécutées. Que faites-vous avec ces IQueryables? – DevilSuichiro

Répondre

0

Si votre EDMX est probablement configuré, vous n'avez pas à vous joindre. Tu ne peux pas le faire

Users.Select(x=> new { 
        UserRoles = x.UserRoles, 
        UserAdditionInfo = x.UserAdditionInfo, 
        Location = x.Location }) 

et ainsi de suite?

(je l'ai trafiqué votre schéma un peu, mais nous espérons que vous avez mon point)

En outre, si ce qui est commun, vous pouvez également créer toujours une vue dans SQL Server et l'ajouter dans EDMX

+0

Salut Merci! Nous n'utilisons pas de fichier edmx dans notre projet. nous suivons la première approche du code. – user3793944