最初に EF5 とコードを使用してプロジェクトを作成しています。
私のオブジェクト設計では、「独立した関連付け」を使用しました。この場合、プロパティ「FarmWhereCowLives」は「独立した関連付け」です。
public class Cow
{
public int CowId
public string Name
public DateTime Birthday
public Farm FarmWhereCowLives
}
public class Farm
{
public int FarmId
public string Name
public string Suburb
}
しかし、特定の農場の最新の牛を選択するようにエンティティ フレームワークに依頼するクエリを実行すると、農場 ID を渡すことができます。たとえば、次のようになります。
_dbset.AsQueryable().Where(c => c.FarmWhereCowLives.FarmId == 1).OrderByDescending(c => c.Birthday).Take(1).Single()
(関連する場合に備えて汎用リポジトリを使用していますが、そうは思いません)
実行される sql (SQL プロファイラで確認できます) が複雑すぎるように見えますか?
例えば
SELECT TOP (1)
[Project1].[CowId] AS [CowId],
[Project1].[Name] AS [Name],
[Project1].[Birthday] AS [Birthday],
[Project1].[FarmWhereCowLives_FarmId] AS [FarmWhereCowLives_FarmId]
FROM
(
SELECT
[Extent1].[RateChangeId] AS [RateChangeId],
[Extent1].[CowId] AS [CowId],
[Extent1].[Name] AS [Name],
[Extent1].[Birthday] AS [Birthday],
[Extent1].[FarmWhereCowLives_FarmId] AS [FarmWhereCowLives_FarmId]
FROM [dbo].[Cow] AS [Extent1]
WHERE [Extent1].[FarmWhereCowLives_FarmId] = 1
)
AS [Project1]
ORDER BY [Project1].[Birthday] DESC'
質問は次のとおりです。
- ネストされた選択とは何ですか?
- EF がより効率的なクエリを作成しなかったのはなぜですか? たとえば、ネストされた選択なしですか?
- 牛オブジェクトの外部キー関連付けを追加する必要がありますか? 適切に記述されたクエリを EF に実行させるために、これを行う必要はありません。
多分私はここで何か間違ったことをしていますか?
乾杯アンドリュー