【发布时间】:2011-05-27 11:17:22
【问题描述】:
(来自 Julia Lerman 的新实体框架书中的一个示例。)我有一个包含两个表的数据库,即联系人和地址。 Contact 表有一个 ContactID (int),还有名字、姓氏等。Address 表有一个 ContactID,还有城市、州、邮编等。
这是一个简单的 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
它与联系人表连接两次!为什么?有没有简单的方法可以防止这种情况发生?
谜团加深。当我删除 orderby 时,连接消失了。当我设置context.ContextOptions.LazyLoadingEnabled = false 时,连接不会消失。
这里也有类似的问题:
Too Many Left Outer Joins in Entity Framework 4?
我会看看有没有更高的力量我可以问...
【问题讨论】:
-
我已合并您创建的所有三个帐户。请注册,它会为我(和其他模组)节省一些时间。另外,为了将来参考,cmets 用于评论,answers 用于回答。检查faq,欢迎来到SO。
标签: linq entity-framework join