由于Entity Framework中的include语句导致的性能问题

时间:2017-10-06 02:53:15

标签: performance entity-framework linq join include

我遇到了API的性能问题。这是由于从多个表中检索数据,如下所示

示例:

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

注意:这些表中的每一个都包含除位置表之外的近(1,50,000)条记录。

我使用了连接而不是.Include,然后也遇到了相同的性能问题。

示例:

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()

请建议更好的替代方法来查询多个表

1 个答案:

答案 0 :(得分:0)

如果您的EDMX可能已配置,则您无需自己加入。 你不能这样做吗

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

等等?

(我捏了一下你的架构,但希望你明白我的观点)

此外,如果这很常见,您也可以始终在SQL Server中创建一个视图并将其添加到EDMX中