2013-03-16 55 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有自己的優化引擎,除非您檢查執行計劃,否則不會告知實際發生的事情。