2017-10-06 28 views
0

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

請提出更好的替代方法在多個表

+0

如果添加它查詢計算是沒有問題的(我認爲不是,儘管大量的包含可以使查詢計算相當繁重),那麼您應該嘗試減少返回的記錄數量/實際執行的查詢數量。你在用這些IQueryables做什麼? – DevilSuichiro

回答

0

如果你的EDMX可能是配置,你不必加入自己查詢。 難道你不能只做

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

等等?

(我捏造你的架構了一點,但希望你明白我的意思)

此外,如果這是常見的,你也可以隨時在SQLServer,創建一個視圖和EDMX

+0

嗨,謝謝!我們不在項目中使用edmx文件。我們正在遵循代碼第一種方法。 – user3793944