实体框架渴望包括两个单孙子

时间:2013-03-16 19:32:04

标签: entity-framework entity-framework-4.1

我需要将孙子孙女与我的EntityFramework查询(4.1)包括在内,其中孙子孙女离开孩子,如下:

  

附表有一条路线,   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正确绑定到实体模型,我就可以忍受这种情况。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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