2

我需要在我的 EntityFramework 查询 (4.1) 中包括孙子,其中孙子是单身离开孩子,如下所示:

Schedule 有一个 Route,Route 有一个 FromAirport 和一个 ToAirport

我尝试了以下方法:

.Include(x => x.Route.FromAirport).Include(x => x.Route.ToAirport)

但它会产生如下的 sql 查询:

FROM       [dbo].[Schedule] AS [Extent1]
INNER JOIN [dbo].[Route] AS [Extent2] ON [Extent1].[RouteId] = [Extent2].[Id]
LEFT OUTER JOIN [dbo].[Route] AS [Extent3] ON [Extent1].[RouteId] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[Airport] AS [Extent4] ON [Extent3].[FromAirportId] = [Extent4].[Id]
LEFT OUTER JOIN [dbo].[Airport] AS [Extent5] ON [Extent3].[ToAirportId] = [Extent5].[Id]

路线当然要加入两次。只要 EF 正确绑定到实体模型,我就可以忍受这一点。

有没有更好的方法来指定包含?

4

1 回答 1

0
.Include(x => x.Route.FromAirport).Include(x => x.Route.ToAirport)

有没有更好的方法来指定包含?

不,没有更好的方法使用 EF 并且不指定您自己的查询。

您显然知道 SQL 语句的样子,但是如果您在 SMSS 中运行该查询并打开执行计划,您很可能会看到它实际上并没有加入两次(因为 where 语句是相同的) . 除非您遇到实际的性能问题,否则我建议您不要尝试查看 EF 正在做什么。此外,由于 SQL Server 有自己的优化引擎,除非您检查执行计划,否则无法知道实际会发生什么。

于 2014-02-10T16:54:58.317 回答