2

次のように、EntityFrameworkクエリ(4.1)に孫を含める必要があります。ここで、孫は子から離れています。

スケジュールには1つのルートがあり、ルートには1つのFromAirportと1つの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]

もちろん、ルートは2回結合されています。EFがエンティティモデルに正しくバインドされている限り、これを使用できます。

インクルードを指定するより良い方法はありますか?

4

1 に答える 1

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

インクルードを指定するより良い方法はありますか?

いいえ、EFを使用し、独自のクエリを指定しないより良い方法はありません。

SQLステートメントがどのように見えるかは明らかですが、SMSSでそのクエリを実行し、実行プランをオンにすると、実際には2回結合されないことがわかります(whereステートメントは同じであるため)。 。実際のパフォーマンスの問題がない限り、EFが何をしているのかを確認しないことをお勧めします。さらに、SQL Serverには独自の最適化エンジンがあるため、実行プランを確認しない限り、実際に何が起こるかはわかりません。

于 2014-02-10T16:54:58.317 に答える