【问题标题】:Performance issue due to include statement in Entity Framework由于在实体框架中包含语句而导致的性能问题
【发布时间】:2017-10-06 02:53:14
【问题描述】:

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

请提供更好的替代方法来查询多个表

【问题讨论】:

  • 如果查询计算没有问题(我认为不是,尽管大量包含会使查询计算变得非常繁重),那么您应该尝试减少返回的记录数/实际执行的查询。你在用这些 IQueryable 做什么?

标签: performance entity-framework linq join include


【解决方案1】:

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

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

等等?

(我稍微捏造了你的架构,但希望你明白我的意思)

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

【讨论】:

  • 您好,谢谢!我们的项目中不使用 edmx 文件。我们遵循代码优先的方法。
猜你喜欢
  • 2015-08-15
  • 2020-06-27
  • 2016-11-05
  • 1970-01-01
  • 2011-11-16
  • 2018-08-02
相关资源
最近更新 更多