gpt4 book ai didi

c# - Entity Framework 多表查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:56 25 4
gpt4 key购买 nike

我的代码需要大约 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、 Entity Framework 和 LINQ

为什么在 Entity Framework 上花费这么多时间,我该如何改进它?

最佳答案

一堆没有答案的问题:

您确定需要您选择的所有字段来完成您想要的工作吗?是否有任何 child 可以延迟加载以减少前期查询的数量?

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

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

关于c# - Entity Framework 多表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7812634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com