由于包含在实体框架中的声明导致的性能问题
问题描述:
我有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()
请提出更好的替代方法在多个表
答
如果你的EDMX可能是配置,你不必加入自己查询。 难道你不能只做
Users.Select(x=> new {
UserRoles = x.UserRoles,
UserAdditionInfo = x.UserAdditionInfo,
Location = x.Location })
等等?
(我捏造你的架构了一点,但希望你明白我的意思)
此外,如果这是常见的,你也可以随时在SQLServer,创建一个视图和EDMX
+0
嗨,谢谢!我们不在项目中使用edmx文件。我们正在遵循代码第一种方法。 – user3793944
如果添加它查询计算是没有问题的(我认为不是,尽管大量的包含可以使查询计算相当繁重),那么您应该尝试减少返回的记录数量/实际执行的查询数量。你在用这些IQueryables做什么? – DevilSuichiro