我需要将孙子孙女与我的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正确绑定到实体模型,我就可以忍受这种情况。
是否有更好的方法来指定包含?
答案 0 :(得分:0)
.Include(x => x.Route.FromAirport).Include(x => x.Route.ToAirport)
是否有更好的方法来指定包含?
不,没有更好的方法使用EF而不指定自己的查询。
你显然知道SQL语句的样子,但如果你在SMSS中运行该查询并启用执行计划,你很可能会发现它实际上没有连接两次(因为where语句是相同)。除非您遇到实际的性能问题,否则我建议您不要尝试查看EF正在做什么。此外,由于SQL Server有自己的优化引擎,除非您检查执行计划,否则无法确定实际发生的情况。