首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Entity-Framework多表查询

Entity-Framework多表查询
EN

Stack Overflow用户
提问于 2011-10-19 03:35:27
回答 1查看 2.1K关注 0票数 2

我的代码需要大约3秒的时间来执行60个雇员,这是很糟糕的性能。我希望我的代码最多能在0.5秒内运行。我有一个方法,需要在我的数据库中的5个表。因为你只能在你的查询中.include("AdjescentTable"),我不得不做3个查询,取得他们的结果,并将它们添加到我的Employee中。

代码语言:javascript
复制
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 CCand 0-5 C。FT中大约有300行,FTJ中有1.5k行,HR中有500行,CC中有500行,C中有500行。

当然,这些不是真实的名称,但我将它们缩短,以使文本更清晰。

我使用DateTime.Now和TimeSpans来确定每次查询的时间。如果我直接在SQL Server上运行这3个查询,它们大约需要300毫秒。

下面是我的SQL查询:

代码语言:javascript
复制
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上花了这么多时间,我如何改进它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-19 03:58:26

一堆没有答案的问题:

您确定需要选择所有字段来执行所需的工作吗?有没有什么孩子可以通过延迟加载来减少前期查询的数量呢?

如果在会话期间多次运行此代码,会发生什么情况?随着时间的推移,它的性能是否会提高?如果是这样的话,您可能需要考虑更改一些查询以使用编译的查询,这样EF就不需要每次都重复地将表达式树解析为TSQL (注意:在4.2中,这将自动为您完成)。

我假设您已经分析了您的应用程序,以确保没有其他您不期望的查询正在运行。另外,我希望您已经通过查询分析器运行了配置文件跟踪,以确保您的表上存在适当的索引。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7812634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档