2013-03-16 59 views
2

我需要包括与我的EntityFramework查询(4.1),其中孙子是单叶关子子孙孙,如下:实体框架急于包括两个单孙子

计划有一个路线, 路线有一个FromAirport和一个ToAirport

我曾尝试以下:

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

但produc es 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能够正确地绑定到实体模型,我就可以忍受这一点。

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

+0

尝试查询路线并包括从,到和时间表 – vittore 2013-03-19 19:50:15

回答

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

是否有指定包括更好的办法?

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

你明明知道什么样的SQL语句的样子,但如果你跑了SMSS该查询,并且打开了执行计划,你很可能会看到,它实际上并没有参加两次(因为where语句是一样的)。除非您遇到实际的性能问题,否则我会建议您不要试图回顾EF正在做什么。此外,由于SQL Server有自己的优化引擎,除非您检查执行计划,否则不会告知实际发生的事情。