gpt4 book ai didi

linq - 简单的 Linq 查询对同一个表进行了重复连接?

转载 作者:行者123 更新时间:2023-12-04 11:30:41 25 4
gpt4 key购买 nike

(来自 Julia Lerman 新的 Entity Framework 书中的一个例子。)我有一个包含两个表的数据库,联系人和地址。 Contact 表有一个 ContactID (int),还有名字、姓氏等。 Address 表有一个 ContactID,还有城市、州、 zip 等。

这是一个简单的 LINQ 查询:

var addressGraphQuery = from a in context.Addresses.Include("Contact")
orderby a.Contact.LastName, a.Contact.FirstName
select a;

从 SQL Profiler,我看到以下内容:
SELECT 
[Extent1].[addressID] AS [addressID],
[Extent1].[City] AS [City],
[Extent1].[StateProvince] AS [StateProvince],
-- etc
[Extent3].[ContactID] AS [ContactID1],
[Extent3].[FirstName] AS [FirstName],
[Extent3].[LastName] AS [LastName],
-- etc
FROM [dbo].[Address] AS [Extent1]
INNER JOIN [dbo].[Contact] AS [Extent2] ON [Extent1].[ContactID] = [Extent2].[ContactID]
LEFT OUTER JOIN [dbo].[Contact] AS [Extent3] ON [Extent1].[ContactID] = [Extent3].[ContactID]
ORDER BY [Extent2].[LastName] ASC, [Extent3].[FirstName] ASC

它两次加入 Contact 表!为什么?有没有简单的方法来防止这种情况?

谜团越来越深。当我删除 orderby 时,连接消失了。当我设置 context.ContextOptions.LazyLoadingEnabled = false 时,连接不会消失.

这里也有一个类似的问题:

Too Many Left Outer Joins in Entity Framework 4?

我会看看是否有更高的权力我可以问...

最佳答案

感谢您报告此问题。是的,预计不会看到两个连接。这是一个已在当前(尚未发布)位中修复的错误。在当前位中,相同的查询产生:

SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[ContactId] AS [ContactId],
...
[Extent2].[Id] AS [Id1],
..
[Extent2].[FirstName] AS [FirstName],
[Extent2].[LastName] AS [LastName]
FROM [dbo].[Address] AS [Extent1]
INNER JOIN [dbo].[Contact] AS [Extent2] ON [Extent1].[ContactId] = [Extent2].[Id] ORDER BY [Extent2].[LastName] ASC, [Extent2].[FirstName] ASC

我的一些播放表明,即使在 4.0 上,这也只会在关系为 1:many 时发生,0..1:many 似乎没问题。

谢谢,
卡蒂·伊斯瓦
Entity Framework 开发人员
微软

关于linq - 简单的 Linq 查询对同一个表进行了重复连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476595/

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