gpt4 book ai didi

asp.net - EF4慢关联访问

转载 作者:行者123 更新时间:2023-12-02 12:13:25 26 4
gpt4 key购买 nike

我正在使用 EF4 构建 ASP.NET 4 Web 应用程序,并且有如下表:

Product
Attribute

Product_Attribute_Map

Product_Attribute_Map 是一个多对多的交叉表。因此 Product 可以有零个或多个属性,反之亦然。

在代码中我这样做:

//Attribute a = new Attribute(); // Edit:
Attribute a = (from a in context.Attributes where a.AttributeID = 1 select a).First();
a.Name = "test";
Product.Attributes.Add(a);

我注意到一个问题导致速度非常慢。 EF4 将在服务器上执行此 SQL:

SELECT 
[Extent2].* FROM [dbo].[Product_Attribute_Map] AS [Extent1]
INNER JOIN [dbo].[Product] AS [Extent2] ON [Extent1].[ProductID] = [Extent2].[ProductID]
WHERE [Extent1].[AttributeID] = @p1

我不明白为什么要这样做。一个属性可能会分配给 10.000 个产品,这使得这是一个错误的查询。向产品添加属性需要超过 5 秒的时间...

如何防止 EF4 选择所有属性?只需选择该产品的属性即可。

谢谢

编辑:这仅使用 POCO t4 模板。 EntityObject模板不存在这个问题。

最佳答案

我的猜测:出现这种情况是因为 LazyLoading 与 POCO 模板生成的 FixUpCollections 一起使用。当您向产品添加属性时,修复集合也会执行反向操作 - 它将向属性添加产品,但首先访问属性中的产品集合将触发延迟加载,因此您的查询将被执行。我不喜欢修复集合...您可以修改 POCO 模板以不使用它们,或者可以删除“属性”中的“产品”导航属性(如果不需要)。

关于asp.net - EF4慢关联访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926864/

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