gpt4 book ai didi

c# - Entity Framework 多对多关系包括极慢

转载 作者:太空狗 更新时间:2023-10-30 01:10:32 26 4
gpt4 key购买 nike

我有一个 Entity Framework 4 模型,其中 2 个实体包含多对多关系,因此有 3 个表,[Q]、[P] 和 [Q2P]-交叉表。运行代码如下:

context.Q.Include("P");

导致长时间等待(我等了大约 5 分钟然后中止了它)。然后我检查了生成的 SQL 并发现了这个:

SELECT *
FROM ( SELECT *
FROM [Q] AS [Extent1]
LEFT OUTER JOIN (SELECT *, CASE WHEN ([Join1].[Id] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
FROM [Q_P] AS [Extent2]
INNER JOIN [P] AS [Extent3] ON [Extent3].[Id] = [Extent2].[Id] ) AS [Join1] ON [Extent1].[Id] = [Join1].[Id]
) AS [Project1]
ORDER BY [Project1].[Id] ASC, [Project1].[C2] ASC

我无法掩饰自己的惊讶,这是什么鬼?通常的多对多SQL查询

select * from [q2p]
join [q] on qId=q.Id
join [p] on pId=p.Id

在不到 1 毫秒内执行,而 EF 查询永远执行。

最佳答案

是的,这不是 secret ,需要很长时间,请在 connection 上投票我大约一年前开业。

但是,5 分钟是绝对不应该花费的时间。

尝试将执行与查询生成分开,并使用 ToTraceString查看确定查询生成时间需要多长时间。

Eager-loading 在当前版本中不是很好,他们表示他们计划在未来降低性能成本。

无论如何,您可以使用存储过程或创建您自己的 ObjectQueries。

参见:
- http://msdn.microsoft.com/en-us/library/bb896241.aspx
- http://msdn.microsoft.com/en-us/library/bb896238.aspx

关于c# - Entity Framework 多对多关系包括极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531128/

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