2017-10-06 15 views
0

私はAPIにパフォーマンス上の問題があります。それによりEntity Frameworkのincludeステートメントによるパフォーマンスの問題

例以下のような複数のテーブルからデータを取得することである。

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がおそらく構成されている場合は、あなた自身に参加する必要はありません複数のテーブルに

+0

場合EDMXにそれを追加することができ、

も(私はあなたのスキーマビットfudgedましたが、うまくいけば、あなたは私のポイントを得ます)クエリの計算は問題ではありません(ただし、インクルードの数が多いとクエリの計算が非常に重くなりますが、実際に実行されたクエリの数を減らすようにしてください)。これらのIQueryablesで何をやっていますか? – DevilSuichiro

答えて

0

を照会するためのより良い代替方法を提案します。 あなたはできません

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

などのようなものですか?

これが共通であれば、あなたも常にSQL Serverでビューを作成し、

+0

こんにちはありがとう!プロジェクトではedmxファイルを使用しません。私たちはコードの最初のアプローチに従っています。 – user3793944

関連する問題