Entity Framework 4.1 Code First でSQL Serverに出力されるクエリーについて

えーEntity FrameworkもO/Rマッパが吐き出すクエリー分はクソよろしくない原則に当てはまるのかなーと。4.0以降では改善されたはずなんですよね。

Code Firstの紹介記事で書いたこのLinq式。

var allAlis = from p in context.Machines
                where  p.name == "ALis"
                orderby p.name
                select p;

そして実行時SQL Serverに送られたT-SQLのクエリ文

SELECT 
[Extent1].[MachineId] AS [MachineId], 
[Extent1].[name] AS [name]
FROM [dbo].[Machines] AS [Extent1]
WHERE N'ALis' = [Extent1].[name]
ORDER BY [Extent1].[name] ASC

対して難しくないはずなんだけどすでにWHEREあたりが残念さを醸し出してる。

もうなんかすごいがっかりな感じです。もうそりゃ心臓も止まるって感じです。

せめてこうしてほしいのよね。SQLがインデックス使うように。

SELECT 
[Extent1].[MachineId] AS [MachineId], 
[Extent1].[name] AS [name]
FROM [dbo].[Machines] AS [Extent1]
WHERE [Extent1].[name] = N'ALis'
ORDER BY [Extent1].[name] ASC

まぁ開発者がCode Firstだの、EFだの言い出したらDBAはメモリ増設やまだでしたらx64化とか考えた方が良いかもね。

どうにかして投げつけるクエリーに手動介入できないかな。設定ファイルとかで。DBA普通コード直せないんで。

コメントを残す