我的代碼大約需要3秒才能執行60個僱員,這是可怕的表現。我希望我的代碼在大約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個查詢,我返回1 FT 7 FTJ,5 HR,0-5 CC和0-5 C.FT中約有300行,FTJ約1.5k行,HR有500行,CC有500行,在C中有500行。
當然這些不是真名,但是我爲了更清晰的文本而縮短了它們。
我使用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,實體框架和LINQ
這是爲什麼需要這麼多時間在實體框架和我怎麼能提高呢?
如果您將所有內容縮寫爲三個或更少的字母,您的問題可能會變得更加清晰。:-P –
(無需瞭解框架的任何內容...)是否有某些原因導致您無法執行多個'在你的框架查詢中加入'或'includes'?另外,如何做一個單一的視圖,你可以創建你的實體?如果你沒有更新任何東西,這可能會簡化一點點... –