Я вижу действительно странную производительность, связанную с очень простым запросом с использованием Entity Framework Code-First с .NET framework версии 4. Запрос LINQ2Entities выглядит следующим образом:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
На это уходит более 3000 миллисекунд. Сгенерированный SQL выглядит очень просто:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
Этот запрос выполняется почти мгновенно при запуске через Management Studio. Когда я меняю код C # для использования функции SqlQuery, она выполняется за 5-10 миллисекунд:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Таким образом, точно такой же SQL, в результирующих объектах отслеживаются изменения в обоих случаях, но разница в производительности между ними очень велика. Что дает?
Performance Considerations for Entity Framework 5