恐ろしいパフォーマンスである60人の雇用者に対して、コードを実行するには約3秒かかります。私のコードを約0.5秒で実行したいと思います。私は自分のデータベースに5つのテーブルを必要とするメソッドを持っています。クエリには.include("AdjescentTable")
しかないので、3つのクエリを作成し、結果を取得してEmployee
に追加する必要があります。エンティティフレームワークの複数テーブルクエリ
var feuilleDeTemps = from fdt in context.FT.Include("FTJ") where
(fdt.ID_Employe == employe.ID_Employe) &&
(fdt.DateDepart <= date) &&
(fdt.DateFin >= date)
select fdt;
var horaireEmploye = from h in context.HR
where h.ID_Employe == employe.ID_Employe
select h;
var congeCedule = from cc in context.CC.Include("C")
where (cc.ID_Employe == employe.ID_Employe &&
cc.Date <= dateFin &&
cc.Date >= dateDebut)
select cc;
Employe.FeuilleDeTemps = feuilleDeTemps;
Employe.horaireEmploye = horaireEmploye;
Employe.congeCedule = congeCedule;
return Employe;
上記の3つのクエリを60回実行すると約0.7秒かかり、データベースには多くの行がありません。これらの3つのクエリのセットについては、FTJでは約300行、HRでは500行、CCでは500行、FTJでは約500行、HRでは500行、CCでは500行、 Cで500行。
もちろん、これらは実際の名前ではありませんが、わかりやすくするためにemを短くしました。
私はDateTime.Now
とTimeSpansを使用して各クエリの時間を決定しました。 SQL Serverで3つのクエリを直接実行すると、約300ミリ秒かかります。ここで
は私のSQLクエリです:
Select e.ID_Employe, ft.*, ftj.* FROM Employe e
INNER JOIN FeuilleDeTemps ft
ON e.ID_Employe = ft.ID_Employe
INNER JOIN FeuilleDeTempsJournee ftj
ON ft.ID_FeuilleDeTemps = ftj.ID_FeuilleDeTemps
WHERE ft.DateDepart >= '2011-09-25 00:00:00.000' AND ft.DateFin <= '2011-10-01 23:59:59.000'
Select e.ID_Employe, hr.* FROM Employe e
INNER JOIN HoraireFixeEmployeParJour hr
ON hr.ID_Employe = e.ID_Employe
Select e.ID_Employe, cc.* FROM Employe e
INNER JOIN CongeCedule cc
ON cc.ID_Employe = e.ID_Employe
INNER JOIN Conge c
ON c.ID_Conge = cc.ID_Conge
は、我々はWCF、Entity FrameworkのとLINQ
がなぜこのEntity Frameworkの上に多くの時間を取っているとどのように私はそれを改善することができますでしょうか?
すべてを3文字以下に短縮しないと、あなたの質問はおそらくもっと明確になりました。:-P –
(フレームワークについては何も知らないうちに...)複数の 'あなたのフレームワークのクエリに「結合」または「包含」しますか?また、単一のビューを作成してエンティティを作成することはできますか?あなたが何かを更新していない場合、それは公正なビットを簡略化するかもしれません... –